Java 持久化单元的多次登录?

Java 持久化单元的多次登录?,java,mysql,jpa,eclipselink,Java,Mysql,Jpa,Eclipselink,嘿,伙计们,我正在我的JavaSE项目中使用eclipse链接进行JPA。我正在为数据库中的每个表使用“jpa控制器”类(这是正确的方法吗)。我还为每个“jpa控制器类”提供一个entitymanager工厂,以便获得entitymanager。程序启动时,显示AnalyzerPU登录成功2次。我应该只使用一个EntityManagerFactory吗。似乎我拥有的每一个人都显示了登录。如果我继续下去,我将有12个登录,数据库中每个表1个。我知道这不可能是正确的 public class Pkg

嘿,伙计们,我正在我的JavaSE项目中使用eclipse链接进行JPA。我正在为数据库中的每个表使用“jpa控制器”类(这是正确的方法吗)。我还为每个“jpa控制器类”提供一个entitymanager工厂,以便获得entitymanager。程序启动时,显示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是一个返回一些数据的JPA控制器类方法,数字是另一个返回数据的JPA控制器类。我已经在一个抽象类中放置了一个entitymanagerfactory,但它仍在运行。

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


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

嘿,我更新了我的帖子。所以,对于我拥有的每个方法,都可以使用EntityManagerFactory“登录”吗?是否使用多线程?对于一个持久化单元,您应该只获得一个登录名,除非您将其关闭()。通常,您应该在静态变量中管理EntityManagerFactory,以确保只有一个。不,我没有使用多线程,但可能是。实际上,我最终创建了一个managerfactory(静态最终版),并将其传递给jpa控制器类以创建EntityManager。这在多线程应用程序中可以吗?