大家好,我在我的 Java SE 项目中使用 JPA 的 eclipse 链接。我为我的数据库中的每个表使用“jpa Controller ”类(这是正确的方法)。我还为每个“jpa Controller 类”提供了一个 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();
}
}
这就是我布置 Controller 的方式。感谢您的帮助。
有时它会这样做。
[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 Controller 类。我已经将一个 entitymanagerfactory 放在一个 AbstractClass 中,但它仍在这样做。
最佳答案
每个事务/请求/ session 应该有一个 EntityManagerFactory 和一个 EntityManager。您还应该拥有一个包含所有类的持久性单元。
从技术上讲,创建具有相同持久化单元名称且没有参数的多个工厂应该共享相同的持久化单元、缓存/连接池,但如果您有不同的持久化单元,那么每个工厂都会有自己的缓存/连接池。
关于java - 持久性单元的多次登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4857317/