Java Hibernate 4.1.8.最终支持事务:是还是否?
我正在使用Hibernate(4.1.8.FINAL)、MySQL(InnoDB),并且在保存多个实体时遇到问题 根据Hibernate文档,应支持批处理,但我遇到以下异常:Java Hibernate 4.1.8.最终支持事务:是还是否?,java,mysql,hibernate,Java,Mysql,Hibernate,我正在使用Hibernate(4.1.8.FINAL)、MySQL(InnoDB),并且在保存多个实体时遇到问题 根据Hibernate文档,应支持批处理,但我遇到以下异常: org.hibernate.TransactionException: nested transactions not supported at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactio
org.hibernate.TransactionException: nested transactions not supported
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:152)
at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1395)
...
以下是我编写的代码(类EntryDaoImpl.java):
如果只更新一个实体,也会发生异常。我还尝试使用openSession()而不是getCurrentSession(),但出现以下异常:
org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
at org.hibernate.collection.internal.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:638)
at org.hibernate.event.internal.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:65)
如果我不使用事务逻辑,那么它就可以工作。在搜索引擎的研究过程中,我看到许多开发人员告诉我Hibernate根本不支持事务。不确定这句话是否过时。迷茫
所以我的问题是:Hibernate是否支持事务(如文档中所述)?和/或你能告诉我我的代码有什么问题吗?谢谢:-)您正在使用声明性事务(@transaction)和程序性事务
tx = session.beginTransaction();
for (final T entity : entities) {
session.saveOrUpdate(entity);
}
tx.commit();
由于在同一代码中使用这两个事务,Hibernate会抱怨
org.hibernate.TransactionException: nested transactions not supported
删除类顶部的事务
注释,它应该可以工作,否则删除开始事务
和提交
希望有帮助。您使用的是声明性事务(@transaction)和程序性事务
tx = session.beginTransaction();
for (final T entity : entities) {
session.saveOrUpdate(entity);
}
tx.commit();
由于在同一代码中使用这两个事务,Hibernate会抱怨
org.hibernate.TransactionException: nested transactions not supported
删除类顶部的事务
注释,它应该可以工作,否则删除开始事务
和提交
希望有帮助。@Transaction注释来自哪里?您是否使用spring并表示@Transactional?还是另一个声明性事务系统?如果是,让它处理事务-异常消息表示您试图在另一个(“嵌套”)内部开始事务。很可能是因为您在hibernate会话中手动打开了一个事务,而声明性事务系统已经打开了一个。@transaction注释来自哪里?您是否使用spring并表示@Transactional?还是另一个声明性事务系统?如果是,让它处理事务-异常消息表示您试图在另一个(“嵌套”)内部开始事务。很可能是因为您在hibernate会话中手动打开了一个事务,而声明性事务系统已经打开了一个。谢谢您的回复。我正在使用事务性注释(不知道为什么使用事务性注释,似乎我在代码缩小过程中删除了“al”),您的提示解决了这个问题:我不能将事务性注释和beginTransaction()结合起来。谢谢您的回复。我正在使用事务性注释(不知道为什么使用事务性注释,似乎我在代码缩小过程中删除了“al”),您的提示解决了这个问题:我不能将事务性注释和beginTransaction()结合起来