hibernate - 何时使用 HQL 而不是 Hibernate OO 方法?

标签 hibernate jpa hql

我正在学习 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/

相关文章:

jakarta-ee - 实体类是一个JavaBean?

java - Java hibernate 中出现意外 token 错误

java - 无法在 Java 中使用 HQL 运行更新查询

hibernate - 提取后的条件 api 连接抛出无效路径错误

java - Hibernate异常: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set but works on another machine with no issue

java - org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 表权限不存在

java - Spring Batch - 如何在逐页浏览数据时修改存储库中的数据?

java - hibernate jpa 更新两个字段并仅从一个字段读取

sql - SQL/HQL总数未在联接上工作

java - Autowiring 依赖项的Spring BeanCreationException注入(inject)失败