当前位置: 首页 > 面试题库 >

Hibernate事务未成功启动

薄涵衍
2023-03-14
问题内容

考虑以下简单的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()。如果启用了上述配置,如何管理事务。