EntityManager和两个带PersistenceContextType.EXTENDED的DAO

时间:2011-01-17 16:51:38

标签: spring jpa dao entitymanager

我的应用程序中的实体管理器出了问题。我有两个这样的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

1 个答案:

答案 0 :(得分:1)

这是EXTENDED持久性上下文的正确行为,因此在这种情况下您不需要它EXTENDED

在大多数情况下,您需要TRANSACTIONAL持久性上下文,这是省略type时的默认模式:

@PersistenceContext(name="my.persistence")
protected EntityManager entityManager;

在此模式下,持久性上下文与事务关联,因此在同一事务内部工作时,所有DAO将共享相同的持久性上下文。我想这就是你需要的。