【发布时间】:2014-05-11 11:10:06
【问题描述】:
我正在开始一个新项目,而且我对 JPA/Hibernate 的使用完全陌生。我正在尝试了解如何正确使用 EntityManager。更准确地说,什么时候实例化它们,我需要多少,我应该关闭它们,我应该把所有东西都放入事务中吗?
无论如何,在我当前的代码中,我在尝试读取之前保存的实体时遇到了 org.hibernate.LazyInitializationException。我会理解相反的情况(在事务中读取一个对象,然后尝试将读取的实体保存在另一个事务中,但由于事务结束,实体不受管理,因此保存失败),但我无法理解。
我将我的代码放在 GitHub (https://github.com/GaetanLeu/intl) 上,它只是几个类。我的主要在 src/sandbox/MessageSandbox.java 中,它在第 28 行失败,并带有以下堆栈跟踪:
Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:164)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
at entity.MessageKey_$$_jvstfcc_0.toString(MessageKey_$$_jvstfcc_0.java)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at com.google.common.base.Present.toString(Present.java:88)
at java.lang.String.valueOf(String.java:2854)
at java.io.PrintStream.println(PrintStream.java:821)
at sandbox.MessageSandbox.main(MessageSandbox.java:28)
我还收到来自 Hibernate 的警告,说我的 EntityManager 已经存在,然后会发生什么? EntityManagerFactory.createEntityManager 方法是否返回现有的?
WARN: HHH000436: Entity manager factory name (intl) is already registered. If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'
我真的不知道何时创建 EntityManagers ^^ 任何帮助将不胜感激,但请简单解释一下,我对此真的很陌生。
哦,顺便说一句,我想准确地说我没有使用 Spring,我没有 EJB,我现在想手动操作 EntityManager,直到我理解为止。谢谢:)
【问题讨论】:
标签: hibernate jpa entitymanager