문제

카테고리 객체를 검색하기 위해 작동하는 JPA 예제를 따랐습니다.

return (ArrayList<Category>) getEntityManager().createQuery("from Category").getResultList();

쿼리는 매우 속기입니다. 선택 사항과 가이드에없는 것에 대한 규칙을 찾을 수 없습니다. 이 간결성이 허용됩니까?

둘째, 이제 다음과 같은 일반적인 DAO에서 이것을 구현하고 싶습니다.

public interface DAO<E, K>
{
    List<E> getAll();
}

"카테고리에서"를 하드 코딩 할 수 없으므로 모든 유형에 대해 첫 번째 쿼리를 다시 작성하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

  1. 예, 간결함은 받아 들여질 수 있습니다. 나는 더 많은 SQL 경험을 가진 다른 사람들에게 더 "매력적"이기 때문에 전체 구문을 선호하지만.

  2. 추가해야합니다 Class<E> DAO에 대한 매개 변수 :

    public List<E> getAll(Class<E> entityClass) {
         Query query = enittyManager.createQuery("from " + entityClass.getName());
         query.getResultList();
    }
    

다른 팁

실제로 메소드 매개 변수를 사용할 필요는 없지만 반사를 사용할 수 있습니다.

반사를 사용한 코드 예제

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class<T> DAO {         
    protected Class<T> clazz;

    public DAO()
    {
      Type genericSuperclass = getClass().getGenericSuperclass();
      // Allow this class to be safely instantiated with or without a parameterized type
      if (genericSuperclass instanceof ParameterizedType)
        clazz = (Class<T>) ((ParameterizedType) genericSuperclass).getActualTypeArguments()[0];
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top