Spring EntityManager和具有PersistenceContextType.EXTENDED的两个DAO
我的应用程序中的实体管理器有问题。我有两个这样的刀类:Spring EntityManager和具有PersistenceContextType.EXTENDED的两个DAO,spring,jpa,dao,entitymanager,Spring,Jpa,Dao,Entitymanager,我的应用程序中的实体管理器有问题。我有两个这样的刀类: @Repository public abstract class DaoA { protected ClassA persistentClass; @PersistenceContext(name="my.persistence", type=PersistenceContextType.EXTENDED) protected EntityManager entityManager; ---------
@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它是
扩展的
持久性上下文的正确行为,因此在这种情况下,您不需要对其进行扩展
在大多数情况下,您需要事务性
持久性上下文,这是省略类型
时的默认模式:
@PersistenceContext(name="my.persistence")
protected EntityManager entityManager;
在此模式下,持久性上下文与事务相关联,因此所有DAO在同一事务中工作时将共享相同的持久性上下文。我想这正是你需要的。谢谢你的快速回答。这是否意味着对于许多DAO实例不可能只有一个PersistenceContext实例?这只是一个附加问题。这是否可能使PersistenceContextType.EXTENDED在我的所有DAO上共享?@hsd:
EXTENDED
持久性上下文的目的是创建与有状态对象的特定实例关联的持久性上下文。DAO通常是无状态的。如果您理解它,并且实际拥有一个调用DAO方法的有状态对象,那么您可以将扩展的上下文注入其中,并将其作为参数传递给DAO方法。