我正在学习 hibernate 并阅读在线 Material 来了解这一点。
什么时候更倾向于使用 HQL(或 SQL)而不是 hibernate 提供的 OO 方式?也就是说,什么时候人们应该更喜欢 HQL 而不是 session.get()? (读操作)
谁能帮我理解这个?
最佳答案
即使 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()
、...)。
关于hibernate - 何时使用 HQL 而不是 Hibernate OO 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47971919/