休眠 3.5 JPA 1.0
注释@OrderBy 仅用于列表字段上的一对多或多对多关系。但我希望它用于单个表,应该按表中的某些字段排序。有可能的?还是另一种解决方案?
例如:
SELECT * FROM INTERCHANGE_KEYS order by PANEL_OPTION, KEY_NAME
我不想为每个表写 hql。
您可以为在 JPA 实体上使用的所有常见操作创建接口。这个接口必须有两个泛型。我将为您提供 2 个操作(persist 和 findAll)的示例,但所有其他操作(合并、删除、查找......)也可以实现。例如:
公共接口 JpaDaoBase { 公共无效持续(E e); public List findAll(String orderProperty, OrderType orderType); }
E 类应该是 JPA 实体,K 代表用于主键的 Java 类型的属性(例如 Long)。
以及接口的实现:
公共抽象类 JpaDaoBaseImpl 实现 JpaDaoBase { 受保护的实体类; 公共 JpaDaoBaseImpl() { this.entityClass = (Class) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } @覆盖 公共无效持久(E e){ entityManager.persist(e); } @覆盖 公共列表 findAll(String orderProperty, OrderType orderType) { 返回 entityManager.createQuery( "从 " + entityClass.getName() + " o orderby "中选择 o orderProperty + + " " + orderType.toString(), entityClass) .getResultList(); } }
之后,对于实体 Example,您通过扩展 JpaDaoBaseImpl 来创建 DAO ExampleDao 的实现,您将开箱即用地实现这两个方法。
这是在 JPA (Hiberante) 项目中创建 DAO 层的标准方法。如果你使用 Spring,你可以使用Spring Data JPA项目(他们有几个 Dao 层类的标准实现)。