2

休眠 3.5 JPA 1.0

注释@OrderBy 仅用于列表字段上的一对多或多对多关系。但我希望它用于单个表,应该按表中的某些字段排序。有可能的?还是另一种解决方案?

例如:

SELECT * FROM INTERCHANGE_KEYS order by PANEL_OPTION, KEY_NAME

我不想为每个表写 hql。

4

1 回答 1

1

您可以为在 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 层类的标准实现)。

于 2013-04-19T12:39:37.393 回答