我正在学习休眠和阅读在线资料以了解这一点。
何时优先使用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()
,......)执行。