什么时候使用 HQL 而不是 Hibernate OO 方法?
When to use HQL over Hibernate OO approach?
我正在学习休眠并在线阅读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 通过提供更多方法来处理其他 classic 查询而更进一步。
SimpleJpaRepository class 就是一个很好的例子。
最后,请注意,在某些情况下,无法选择特定的 JPA/Hibernate 方法来操作实体。
与实体或 EntityManager
状态相关的操作 只能使用这些方法执行(persist()
、flush()
或refresh()
、clear()
、...)。
我正在学习休眠并在线阅读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 通过提供更多方法来处理其他 classic 查询而更进一步。
SimpleJpaRepository class 就是一个很好的例子。
最后,请注意,在某些情况下,无法选择特定的 JPA/Hibernate 方法来操作实体。
与实体或 EntityManager
状态相关的操作 只能使用这些方法执行(persist()
、flush()
或refresh()
、clear()
、...)。