java代码中,连续几个insert,其中一个是会抛异常的。但是发现前面的insert已经在数据库中生效了,并不回滚.数据库是mysql和oracle
放在javaeye的问题频道好几天了,都没得到正确答案:http://www.iteye.com/problems/6314
只好跑到论坛来了:(
问题补充
我试过了,也不行哦:(
从日志中看得出来,事务根本就没启动
Fetching JDBC Connection from DataSource
Creating new JDBC DriverManager Connection to [jdbc:oracle:thin:jdf30/1@192.168.103.236:1521:jstrd236]
Obtained JDBC Connection [oracle.jdbc.driver.T4CConnection@109ea96] for iBATIS operation
Returning JDBC Connection to DataSource
Opened SqlMapSession [com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl@1e12f6d] for iBATIS operation
Fetching JDBC Connection from DataSource
Creating new JDBC DriverManager Connection to [jdbc:oracle:thin:jdf30/1@192.168.103.236:1521:jstrd236]
Obtained JDBC Connection [oracle.jdbc.driver.T4CConnection@46d228] for iBATIS operation
Returning JDBC Connection to DataSource
这段日志显示出根本没有事务控制,每次都是取一个connection然后放回去,再操作再取.郁闷... ...
expression貌似应该写到类的上级目录 你这里没有写到
是不是事务层搞错了
我答了个你看看是不是吧。
http://www.iteye.com/topic/11738
spring的声明式事务,可以在业务层统一的对事务进行管理,在spring的配置文件这样子的配置,我这里的业务层为com.services。
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
value="classpath:hibernate.cfg.xml">
<!-- 事务属性:通知/处理/横切关注点
<tx:method name="add*" propagation="REQUIRED" isolation="DEFAULT" />
以add开头 事务传播属性(没有事务就创建) 事务隔离级别(数据库默认)
-->
<tx:advice id="mytx">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 织入 -->
<aop:config>
<aop:advisor advice-ref="mytx" pointcut="execution(* com.services.*.*(..) )"/>
</aop:config>