Jpa JPQL查询选择可选+通用DAO选择

Jpa JPQL查询选择可选+通用DAO选择,jpa,jakarta-ee,jpql,Jpa,Jakarta Ee,Jpql,我遵循了一个工作JPA示例来检索类别对象: return (ArrayList<Category>) getEntityManager().createQuery("from Category").getResultList(); 这个查询非常简捷——我在任何指南中都找不到关于哪些是可选的,哪些不是的规则。这种简洁是否可以接受 其次,我现在想在通用DAO中实现这一点,例如: public interface DAO<E, K> { List<E> g

我遵循了一个工作JPA示例来检索类别对象:

return (ArrayList<Category>) getEntityManager().createQuery("from Category").getResultList();
这个查询非常简捷——我在任何指南中都找不到关于哪些是可选的,哪些不是的规则。这种简洁是否可以接受

其次,我现在想在通用DAO中实现这一点,例如:

public interface DAO<E, K>
{
    List<E> getAll();
}
如何重写第一个查询以适用于所有类型,因为我无法从类别中硬编码

是的,简短是可以接受的。虽然我更喜欢完整的语法,因为它对其他有更多SQL经验的人更有吸引力

您必须向DAO添加一个类参数:

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

实际上,您不必使用方法参数,但可以使用反射


感谢您提供的提示,我将在泛型dao的构造函数中获得类名,并在查询中使用该变量@暴民罚款:顺便说一句,接受0票的答案看起来很奇怪;
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];
    }
}