2011-01-31 82 views
2

嘿家伙我在我的Java SE项目中使用eclipse链接进行JPA。我为我的数据库中的每个表使用“jpa控制器”类(这是正确的方式)。我还为每个“jpa控制器类”提供一个EntityManagerFactory,以便我可以获取该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是一个返回一些数据的JPAController类方法,数字是返回数据的另一个JPA控制器类。我已经把一个entitymanagerfactory放在了AbstractClass中,但它仍然在做。

回答

1

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

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

+0

嘿我更新了我的文章。因此,对于我拥有的每种方法,都有一个EntityManagerFactory“登录”是好的吗? – 2011-02-01 20:54:17