【发布时间】:2014-03-26 18:52:14
【问题描述】:
这是一个与最佳做法相关的问题。我正在使用带有 JPA 的 Play Framework 2.2.1 来实现 ORM 持久性。 Play 提供了很多“帮助”方法和类,特别是我发现的是 JPA.em() 方法。但是,当我尝试在公共静态方法中使用此方法获取 EntityManager 对象时,出现以下错误:
RuntimeException: No EntityManager bound to this thread. Try to annotate your action method with @play.db.jpa.Transactional
由于我是从静态方法调用 JPA.em(),我想上述错误是有道理的。我的问题是,创建 EntityManager 对象的最佳实践是什么?通过在静态方法中执行类似这样的操作来创建 em 对象是否是一项昂贵的操作,该静态方法将在应用程序的整个生命周期中被多次调用:
EntityManager em = Persistence.createEntityManagerFactory("DefaultDS").createEntityManager();
或者我应该创建一个对 EntityManagerFactory 的公共静态引用并在静态方法中执行类似的操作:
EntityManager em = staticEntityFactory.createEntityManager();
或者我应该在实体中创建一个 em 对象并让每个实体都像这样维护对 em 对象的引用?
@Entity
public class myEntity {
private static EntityManager em = Persistence.createEntityManagerFactory("DefaultDS").createEntityManager();
}
我们将不胜感激有关处理此问题的最佳方法的一些指导,谢谢!
【问题讨论】:
标签: hibernate jpa orm playframework playframework-2.0