代码之家  ›  专栏  ›  技术社区  ›  CuriousMind

何时使用HQL over Hibernate OO方法?

  •  2
  • CuriousMind  · 技术社区  · 8 年前

    我正在学习hibernate并阅读在线材料来了解这一点。

    与hibernate提供的OO方式相比,何时更倾向于使用HQL(或SQL)?也就是说,什么时候应该选择HQL而不是会话。get()?(读取操作)

    有人能帮我理解这一点吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   davidxxx    8 年前

    即使Hibernate是最常用的JPA实现,我还是会坚持使用规范API(JPA)。
    所以 EntityManager 而不是 Session .

    通常,您希望编写自己的查询,因为查询的复杂性最低。
    但是特定的JPA/Hibernate方法不允许执行这种查询。
    这些方法只处理简单的情况。

    因此,一般来说,您应该喜欢特定的JPA/Hibernate方法,而不是每次创建自定义查询。
    避免使用JPQL编写锅炉铭牌代码通常是一种捷径。
    例如,如果您想从实体的ID中检索实体,那么您手头就没有任何值来编写如此简单的查询。
    您必须编写锅炉板代码(创建查询、设置参数查询、执行查询)。
    使用 EntityManager.find(Class<T>, Object) 是一种更简单、更清晰的方法,因为您无需进一步了解行为。

    请注意,Spring数据JPA通过提供更多方法来处理其他经典查询,走得更远。
    这个 SimpleJpaRepository 课堂就是一个很好的例子。

    最后,请注意,在某些情况下,操作实体的特定JPA/Hibernate方法不是一种选择。
    与实体或 实体管理器 状态 只能执行 使用这些方法( persist() , flush() refresh() , clear() , ...).