我的应用程序中的实体管理器出了问题。我有两个这样的DAO clasess:
@Repository
public abstract class DaoA
{
protected ClassA persistentClass;
@PersistenceContext(name="my.persistence", type=PersistenceContextType.EXTENDED)
protected EntityManager entityManager;
-------------- some typical action for DAO --------------
}
第二个DAO适用于ClassB,看起来类似于DaoA。剩下的事情是由Spring框架为我完成的。
当我调试应用程序时,我发现两个DAO对象都有不同的EntityManager实例。在结果中,我的两个不同的DAO与不同的PersistenceContext连接。
问题是这是否是正确的行为?我希望所有DAO类都有相同的PersistenceContext。如果有可能,如果我理解正确的JPA,请给我一个提示吗?
关心Hsd
答案 0 :(得分:1)
这是EXTENDED
持久性上下文的正确行为,因此在这种情况下您不需要它EXTENDED
。
在大多数情况下,您需要TRANSACTIONAL
持久性上下文,这是省略type
时的默认模式:
@PersistenceContext(name="my.persistence")
protected EntityManager entityManager;
在此模式下,持久性上下文与事务关联,因此在同一事务内部工作时,所有DAO将共享相同的持久性上下文。我想这就是你需要的。