关于spring处理事物的问题

joemw 2013-04-05 06:13:27
小弟今天用spring配置处理hibernate的事物,遇到了这样一个问题,如下:

//使用spring配置hibernate
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource">
</property>
<property name="hibernateProperties">
<props>
<prop key="dialect">${dialect}</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/myorg/entity/User.hbm.xml</value>
<value>com/myorg/entity/Notify.hbm.xml</value>
<value>com/myorg/entity/Carspace.hbm.xml</value>
<value>com/myorg/entity/House.hbm.xml</value>
<value>com/myorg/entity/Role.hbm.xml</value>
</list>
</property>
</bean>


<!-- 配置声明事务管理 -->
<!-- 事务管理 -->
<bean id="hibernateTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务规则(事务通知) -->
<tx:advice id="transactionAdvice"
transaction-manager="hibernateTransactionManager">
<tx:attributes>
//如下配置后,更新,删除,查询没有问题 插入有问题
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="find*" propagation="NOT_SUPPORTED"
read-only="true" />
<tx:method name="Check*" propagation="NOT_SUPPORTED"
read-only="true" />
<tx:method name="get*" propagation="NOT_SUPPORTED"
read-only="true" />
</tx:attributes>
</tx:advice>
<!--定义方面完成织入-->
<aop:config>
<!-- 定义切面 -->
<aop:pointcut id="tranPointCut"
expression="execution(* com.myorg.service.*.*(..))" />
<!-- 完成织入 -->
<aop:advisor advice-ref="transactionAdvice"
pointcut-ref="tranPointCut" />
</aop:config>

其他的配置都没问题,
这样配置后,删除,修改,查询 是没有什么问题的,但是插入有问题,控制台能够打印出插入语句,但是数据库根本没有插入记录。不知道是不是提交的问题 另外,我使用了opensessionInView.
劳烦大家帮一下忙啊 搞了一下午了...

...全文
126 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvzg_005 2013-04-07
  • 打赏
  • 举报
回复
注意方法开头的标识
farmer-it 2013-04-07
  • 打赏
  • 举报
回复
<tx:method name="save*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="modify*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="find*" propagation="NOT_SUPPORTED" read-only="true" /> <tx:method name="Check*" propagation="NOT_SUPPORTED" read-only="true" /> <tx:method name="get*" propagation="NOT_SUPPORTED" read-only="true" /> lz你service中的每个业务方法是否都是这样命名的?加上事务的话,每个方法都有一个特殊的标记!查询的时候不用加事务,做数据库更新的时候,加上事务!
babys 2013-04-06
  • 打赏
  • 举报
回复
你先验证一下是否所有的类都是这样,如果只是某个类那就检查一下映射文件,会不会映射里面用了Not null 而又没有为此属性赋值.如果所有类都这样,按楼上的再看看.还要注意OpenSessionInviewFilter应该在Struts2之类的框架的过滤器前面.
咖啡爬虫 2013-04-06
  • 打赏
  • 举报
回复
按理来说这样配置是没有问题的;真的有问题可能有2种情况: 1、检查是不是你的插入方法名没有以save开头; 2、检查你插入方法存在的路径是不是在aop中定义的规则下。 我也不是很懂这个,只能说说我的看法,希望帮到你

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧