【问题标题】:When to use HQL over Hibernate OO approach?何时使用 HQL 而不是 Hibernate OO 方法?
【发布时间】:2017-12-25 20:45:36
【问题描述】:

我正在学习休眠并阅读在线资料以了解这一点。

什么时候更倾向于使用 HQL(或 SQL)而不是 hibernate 提供的 OO 方式?也就是说,One 什么时候应该更喜欢 HQL 而不是 session.get()? (读操作)

谁能帮我理解这个?

【问题讨论】:

    标签: hibernate jpa hql


    【解决方案1】:

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

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

    因此,作为一般规则,您应该优先使用特定的 JPA/Hibernate 方法,而不是每次都创建自定义查询。
    避免使用 JPQL 编写样板代码通常是一种捷径。
    例如,如果您想从其 ID 中检索实体,那么您没有任何价值来编写如此简单的查询。
    您将不得不编写样板代码(创建查询、设置参数查询、执行查询)。
    使用EntityManager.find(Class<T>, Object) 是一种更简单、更清晰的方法,因为您无需进一步了解行为。

    请注意,Spring Data JPA 更进一步,提供了更多方法来处理其他经典查询。
    SimpleJpaRepository 类就是一个很好的例子。

    最后请注意,在某些情况下,无法选择特定的 JPA/Hibernate 方法来操作实体。
    与实体或EntityManager 状态相关的操作只能执行 使用这些方法(persist()flush()refresh()clear()、...)。

    【讨论】:

    • 感谢您的回答。如果不是 HQL,我要求更一般的 HQL、JPQL。是否有其他理由使用 HQL、JPQL 而不是 Entity 检索方式?
    • 不客气 :) “还有其他理由使用 HQL、JPQL 而不是实体检索方式吗?” 可能还有其他一些情况,但这些是角落情况。
    猜你喜欢
    • 2012-07-30
    • 1970-01-01
    • 2011-08-20
    • 1970-01-01
    • 2015-06-19
    • 2011-03-02
    • 1970-01-01
    • 2014-06-06
    • 2015-12-06
    相关资源
    最近更新 更多