我正在使用 SWING 开发一个单用户桌面应用程序。我对这种使用 java.sql api 的应用程序有一点经验,并发现它一点也不舒服......
在我的新应用程序中,我第一次尝试使用 JPA,我阅读了很多教程,这些教程使我几乎了解了我需要的所有内容,但没有找到真正的 java 桌面应用程序的好示例。
我正在考虑使用以下架构,但不知道我是否正确......
我想创建一个 MyPersistenceUnit 类:
public class MyPersistenceUnit {
private static EntityManagerFactory factory;
private static EntityManager entityManager;
public static void initiate(){
factory=Persistence.createEntityManagerFactory("PU_Name");
entityManager=factory.createEntityManager();
}
public static EntityManager getEntityManager() {
return entityManager;
}
public static void close(){
entityManager.close();
factory.close();
}
}
initiate() 方法将首先被调用,close() 方法将在应用程序关闭时被调用。
当应用程序运行时,所有事务都将通过 getEntityManager() 实例完成,该实例可以在应用程序中的任何位置访问。如果我对 JSE 应用程序的理解是正确的,则获得的实体管理器具有扩展的持久性上下文,它将在实体管理器不关闭时将所有实体保持在托管状态,这就是让我这样想的原因......
我不知道我是否遗漏了一些东西,所以任何提示将不胜感激
请注意,我将 eclipselink 提供程序与 derby 嵌入式数据库一起使用。
Thanks
据我了解,问题归结为您是否应该打开 EntityManager 并全局存储其引用并在应用程序中的各处访问相同的实例。
我认为如果您的应用程序是中小型的,那应该没问题。请注意,数据库连接(因此会话/entityManager)可能会由于各种因素而下降。并且不要对事务执行此操作(即不要在开始时打开它们并在结束时提交)。保持交易尽可能细粒度。
有经验丰富的人对此进行了各种讨论,您可以在这里关注:for and counter关于这个问题的争论 -在 Swing 应用程序中使用 Hibernate 进行会话管理
另请参阅this关于同一主题。
Here是一个由 hibernate 委员会创建的示例桌面应用程序。不老,你就能明白。
最后this这篇文章非常适合理解桌面应用程序的一般 JPA 概念。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)