我通过与数据库的多个连接来持久化实体。处理持久化的类实现了runnable接口,我在run()方法中创建了EntityManagers。在阅读this之后,我想知道在类构造函数或静态初始化块中初始化EntityManagerFactory是否更好。
答案 0 :(得分:1)
我假设你在Java SE中使用JPA而不是Java EE。此外,我假设您有一个处理实体持久性的类 - 当您要求类构造函数或静态启动时,您指的是此类。此外,我假设您的所有多个连接都针对同一个数据库......我假设您不重用您的实例:既不是您的EntityManager
实例也不是您的可运行类实例。
如果这些假设是正确的,那么我宁愿在你的runnable类的静态启动中或在第二个实现为singleton的类中初始化EntityManagerFactory
。
如果在runnable类的类构造函数中创建EntityManagerFactory
,则每个实例(每个线程)有一个工厂。这是可能的,但不必要,因为对于多个逻辑相同的EntityManagerFactory
实例,您只需要一个EntityManager
。
另一个问题是在哪里创建EntityManager
本身:在类构造函数中(允许您在初始化线程的早期捕获错误)或在run
- 方法中。我个人更喜欢run
- 方法,因为它允许您使用EntityManager
在同一方法中创建和关闭try/finally
警告:请注意,您没有跨多个线程的交易。