Hibernate和Spring事务管理器:事务未成功启动(Hibernate and Spring Transaction Manager: Transaction Not Successfully

编程入门 行业动态 更新时间:2024-10-08 14:43:32
Hibernate和Spring事务管理器:事务未成功启动(Hibernate and Spring Transaction Manager: Transaction Not Successfully Started)

我有一个Generic Repository,其方法名为saveList()。 此方法的目的是获取一个List并将其保存在500个对象的“块”中。 不幸的是,当我进入提交时,我收到了“TransactionException:事务未成功启动”。

我见过的所有内容都说这是Spring Transaction Manager的结果。 不幸的是,对于这种特殊方法,我需要手动控制事务。

相关代码如下:

// from generic non-abstract repository @Transactional public void saveList(List<T> objectList) { Session session = sessionFactory.getCurrentSession(); Transaction tx = session.beginTransaction(); int i = 1; for (T obj : objectList) { session.save(obj); //sessionFactory.getCurrentSession().save(obj); i++; if (i % 500 == 0) { session.flush(); //sessionFactory.getCurrentSession().flush(); } } if (!tx.wasCommitted()) { tx.commit(); } //sessionFactory.getCurrentSession().getTransaction().commit(); }

从applicationContext.xml配置:

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean>

任何帮助表示赞赏。

I have a Generic Repository with a method named saveList(). The purpose of this method is to take a List and persist it in "chunks" of 500 objects. Unfortunately, I'm getting a "TransactionException: Transaction not successfully started" when I get to the commit.

Everything I've seen says that this is a result of the Spring Transaction Manager. Unfortunately, for this particular method, I need to manually control the transaction.

Relevant code is below:

// from generic non-abstract repository @Transactional public void saveList(List<T> objectList) { Session session = sessionFactory.getCurrentSession(); Transaction tx = session.beginTransaction(); int i = 1; for (T obj : objectList) { session.save(obj); //sessionFactory.getCurrentSession().save(obj); i++; if (i % 500 == 0) { session.flush(); //sessionFactory.getCurrentSession().flush(); } } if (!tx.wasCommitted()) { tx.commit(); } //sessionFactory.getCurrentSession().getTransaction().commit(); }

Configuration from applicationContext.xml:

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean>

Any assistance is appreciated.

最满意答案

您正在使用声明式和程序式事务划分。 摆脱session.beginTransaction()和相关的方法调用。 只使用@Transactional。

You're using both declarative and programmatic transaction demarcation. Get rid of the session.beginTransaction() and related method calls. Only use @Transactional.

更多推荐

本文发布于:2023-08-03 13:38:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1388942.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:事务   管理器   Spring   Hibernate   Started

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!