JPQL 쿼리 선택 옵션 + 제네릭 DAO 선택
문제
카테고리 객체를 검색하기 위해 작동하는 JPA 예제를 따랐습니다.
return (ArrayList<Category>) getEntityManager().createQuery("from Category").getResultList();
쿼리는 매우 속기입니다. 선택 사항과 가이드에없는 것에 대한 규칙을 찾을 수 없습니다. 이 간결성이 허용됩니까?
둘째, 이제 다음과 같은 일반적인 DAO에서 이것을 구현하고 싶습니다.
public interface DAO<E, K>
{
List<E> getAll();
}
"카테고리에서"를 하드 코딩 할 수 없으므로 모든 유형에 대해 첫 번째 쿼리를 다시 작성하려면 어떻게해야합니까?
해결책
예, 간결함은 받아 들여질 수 있습니다. 나는 더 많은 SQL 경험을 가진 다른 사람들에게 더 "매력적"이기 때문에 전체 구문을 선호하지만.
추가해야합니다
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];
}
}
제휴하지 않습니다 StackOverflow