1

我有一个标准的 spring/jpa/hibernate 设置。一个带有 @Transactional 的服务方法,它使用两个不同的 DAO,每个 DAO 都注入了​​自己的 EntityManager 实例。

在查询时,最终是相同的实体(直接和间接检索),它们被表示为不同的对象,即使对于相同的休眠会话(事务)它们应该是相同的对象。

那么我的 DAO 是使用不同的休眠会话,还是...?

4

1 回答 1

1

即使休眠会话相同,对象标识也可能不同。如果您使用 entityManager.find 方法按标识符读取,则返回的对象在同一会话中始终相同(第一级缓存)。但是,使用 JPQL 或条件查询可能会得到不同的实例(具有相同的数据)。

于 2013-10-26T00:09:44.727 回答