Geo*_*rey 5 java jpa desktop-application eclipselink
我正在使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
activate()方法将是第一个被调用的方法,并且当应用程序关闭时将调用close()方法.
在应用程序运行时,所有事务都将通过getEntityManager()实例完成,该实例可在应用程序的每个位置访问.如果我对JSE应用程序的理解是正确的,那么获得的实体管理器有一个扩展的持久化上下文,它将使所有实体保持在托管状态,而实体管理器不会被关闭,这就是让我这样思考的原因......
我不知道我是否遗漏了什么,所以任何小费都会受到赞赏
请注意,我正在使用eclipselink提供程序和derby嵌入式数据库.
谢谢
据我了解,问题归结为您是否应该打开EntityManager并全局存储其引用并在应用程序中的任何位置访问相同的实例.
我认为如果您的应用程序是中小型应该没问题.请注意,由于各种因素,数据库连接(因此会话/实体管理器)可能会丢失.并且不要对事务执行此操作(即不要在开始时打开它们并在最后提交).保持交易尽可能精细.
已经有各种讨论,其中比较有经验的人了解它的讨论,你可以按照在这里:对于和计数器在这太问题的说法- 在Swing应用程序使用Hibernate的Session管理
也可以在同一主题上看到这一点.
这是一个由hibernate提交者创建的示例桌面应用程序.它有点旧,你可以得到这个想法.
最后,这是了解桌面应用程序的一般JPA概念的好文章.
经过重新思考我的设计,我决定更改如下:
| 归档时间: |
|
| 查看次数: |
7767 次 |
| 最近记录: |