多个登录持久性单元?

时间:2011-01-31 23:28:48

标签: java mysql jpa eclipselink

嘿伙计们,我在Java SE项目中使用eclipse链接进行JPA。我正在为我的数据库中的每个表使用“jpa控制器”类(这是正确的方法)。我还为每个“jpa控制器类”提供了一个EntityManagerFactory,因此我可以获得实体管理器。程序启动时,它显示AnalyzerPU登录成功2次。我应该只使用一个EntityManagerFactory。似乎每一个我都有它显示登录。如果我继续前进,我将有12次登录,我的数据库中的每个表都有1次登录。我知道这不正确吗?

public class PkgLineControllerImpl extends AbstractController implements PkgLineController {

private EntityManagerFactory emf = null;

public PkgLineControllerImpl() {

    super(StateHistoryImpl.class);
    emf = Persistence.createEntityManagerFactory("StateHistoryAnalyzerPU");
}

public EntityManager getEntityManager() {
    return emf.createEntityManager();
}

@Override
public List<PkgLine> findAll() {
    EntityManager em = getEntityManager();

    List<PkgLine> pkgLineList = new ArrayList<PkgLine>();

    try {
        pkgLineList = em.createNamedQuery("PkgLine.findAll").getResultList();
        return pkgLineList;
    } finally {
        em.close();
    }
}

}

这就是我将控制器放下的原因。感谢您的帮助。

有时它会这样做。

[EL Info]: 2011-02-01 14:34:07.991--ServerSession(18450577)--EclipseLink, version: Eclipse Persistence Services - 2.0.2.v20100323-r6872
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful
100
200
100
200
100
null
null
null
null
null

有时它会这样做。

Persistence Services - 2.0.2.v20100323-r6872
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful
100
200
100
200
100
Persistence Services - 2.0.2.v20100323-r6872
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful
null
null
null
null
null

其中null是一个返回一些数据的JPAController类方法,而数字是返回数据的另一个JPA控制器类。我在AbstractClass中放置了一个实体操作员,但它仍在执行它。

1 个答案:

答案 0 :(得分:1)

您应该有一个EntityManagerFactory,每个事务/请求/会话有一个EntityManager。您还应该有一个包含所有类的持久性单元。

从技术上创建具有相同持久性单元名称且没有参数的多个工厂应共享相同的持久性单元缓存/连接池,但如果您有不同的持久性单元,则每个工厂都有自己的缓存/连接池。