我已经按照一个有效的JPA示例来检索Category对象:
return (ArrayList<Category>) getEntityManager().createQuery("from Category").getResultList();
查询非常简写 - 我无法找到任何指南的规则和任何指南中的规则。这简洁可以接受吗?
其次,我想在一个通用的DAO中实现它,例如:
public interface DAO<E, K>
{
List<E> getAll();
}
如何重写第一个查询以适用于所有类型,因为我无法硬编码“来自类别”..?
答案 0 :(得分:5)
是的,简洁是可以接受的。虽然我更喜欢完整的语法,因为它对那些拥有更多SQL经验的人更具“吸引力”。
您必须在DAO中添加Class<E>
参数:
public List<E> getAll(Class<E> entityClass) {
Query query = enittyManager.createQuery("from " + entityClass.getName());
query.getResultList();
}
答案 1 :(得分:2)
您实际上不必使用方法参数,但可以使用Reflection。
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];
}
}