0

我通过与数据库的多个连接来持久化实体。处理持久化的类实现了可运行接口,我在 run() 方法中创建了 EntityManagers。看完这篇,我想知道是在类构造函数中初始化EntityManagerFactory还是在静态初始化块中更好。

4

1 回答 1

1

我假设您在 Java SE 中使用 JPA,而不是 Java EE。此外,我假设您有一个处理实体持久化的类 - 当您要求类构造函数静态初始化时,您的意思是这个类。此外,我假设您的所有多个连接都针对同一个数据库......并且我假设您不重用您的实例:既不是您的EntityManager实例,也不是您的可运行类实例。

如果假设是正确的,那么我宁愿EntityManagerFactory在您的可运行类的静态初始化中或在作为单例实现的第二个类中初始化。

如果您EntityManagerFactory在可运行类的类构造函数中创建,则每个实例(即每个线程)都有一个工厂。这是可能的,但没有必要,因为EntityManagerFactory多个逻辑相同的EntityManager实例只需要一个。

另一个问题是在哪里创建EntityManager自身:在类构造函数中(允许您在初始化线程的早期捕获错误)或在run- 方法中。就我个人而言,我更喜欢run- 方法,因为它允许您EntityManager在同一方法中使用try/finally)创建和关闭

警告:请注意,您没有跨多个线程的事务。

于 2013-02-28T07:02:09.967 回答