hibernate问题持续更新

本文解决了Hibernate中因事务配置不当导致的写操作错误问题。通过调整事务管理配置,将createVoucher方法改为addVoucher,使该操作能正确执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题一:
hibernate中一些不需要维持到数据库中的字段,使用@Transient 来维持


问题二:
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
at org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1186)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:696)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:694)
at com.bstek.scm.dao.daoImpl.VoucherDaoImpl.addVoucher(VoucherDaoImpl.java:31)
at com.bstek.scm.bo.fin.impl.VoucherManagerImpl.createVoucher(VoucherManagerImpl.java:48)
解决:
因为事务是在manager 层,然后方法createVoucher .create 不在配置的事务中.
事务配置
<aop:config>
<!-- 切入点 -->
<aop:advisor pointcut="execution(* com.bstek.scm.bo..*.*(..))" advice-ref="txAdvice"/>
</aop:config>

<!-- 创建一个切面 -->
<tx:advice id="txAdvice" transaction-manager="TtransactionManager">
<tx:attributes>
<!-- 只要方法名 -->
<tx:method name="add*" propagation="REQUIRED"
isolation="DEFAULT" rollback-for="com.bstek.scm.common.exception.ManagerException,Exception"/>
<tx:method name="delete*" propagation="REQUIRED"
isolation="DEFAULT" rollback-for="com.bstek.scm.common.exception.ManagerException,Exception" />
<tx:method name="update*" propagation="REQUIRED"
isolation="DEFAULT" rollback-for="com.bstek.scm.common.exception.ManagerException,Exception"/>
<tx:method name="save*" propagation="REQUIRED"
isolation="DEFAULT" rollback-for="com.bstek.scm.common.exception.ManagerException,Exception"/>
<tx:method name="insert*" propagation="REQUIRED"
isolation="DEFAULT" rollback-for="com.bstek.scm.common.exception.ManagerException,Exception"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true"
isolation="DEFAULT" />
</tx:attributes>
</tx:advice>

所以 createVoucher 这个方法被认为是只读事务.
将 createVoucher 改为 addVoucher 就ok了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值