考虑以下简单的Hibernate场景:
session = getHibernateSession();
tx = session.beginTransaction();
SomeObject o = (SomeObject) session.get(SomeObject.class, objectId);
tx.commit();
此代码产生以下异常:
org.hibernate.TransactionException: Transaction not successfully started
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:100)
at com.bigco.package.Clazz.getSomeData(Clazz.java:1234)
这是怎么回事?
好吧,看来一旦我们达到要求tx.commit()
,交易就已经提交了。我唯一的猜测是Hibernate get()
在访问对象时已经提交了事务。
解决方法很简单:
// commit only if tx still hasn't been committed yet (by hibernate)
if (!tx.wasCommitted())
tx.commit();
问题内容: 考虑以下简单的Hibernate场景: 此代码产生以下异常: 这是怎么回事? 问题答案: 好吧,看来一旦我们达到要求,交易就已经提交了。我唯一的猜测是Hibernate 在访问对象时已经提交了事务。 解决方法很简单:
问题内容: 我有一个需要保存的UserProfile实体。将实体保存在数据库中后,出现以下异常: 另外,当我看到该表时,该实体将保留而不是进行回滚! 我正在使用hibernate事务管理器 而我的hibernate配置是: 任何人都可以。告诉我这是怎么回事? 问题答案: 我认为您已经成为双重交易管理的受害者。如果在同一项目中一起使用和在一起,则更可能出现此问题。 您的代码应为: 选项1. hibe
问题内容: 我有一个简单的类,它开始3个线程,并在每个线程中保存一个新对象。但是我遇到了我无法理解的例外。谁能帮我理解为什么会例外? 这是显示异常的日志文件的相关部分: 编辑1 问题答案: Hibernate中的会话对象不是线程安全的,除非您同步访问会话对象,否则不应在不同线程中使用同一会话。
问题内容: 我有一个专门用于通过hibernate的持久层将数据持久保存在db中的类。 问题在于它不会持久保存数据。 堆栈是: 但我必须指出,它在其他课程中也能正常工作。 更新 : 当我印刷它给我的时候。 更新 我试图获得更多有关该错误的信息: 我知道问题出在哪里: 实际上,该表对同一张表有2 fk ,而我,我坚持的是 问题答案: 可能引发了异常。这意味着该子句中没有要回滚的活动事务。这就是为什么
我可能错过了一些让它工作的代码。任何意见/建议都将对我今后的工作有很大帮助。
我在Hibernate中看到了以下属性。cfg。一个企业(EJB)应用程序中的xml。我不知道这到底意味着什么。 我在代码中没有找到任何与事务相关的东西,比如begin transaction或commit,相反,我只看到sessionFactory。openSession()和会话。flush()。如果启用了上述配置,如何管理事务。