userService 代码; @Transactional(rollbackFor=Exception.class)//如果发生Exception异常了,就进行回滚 @Service("userService") public class UserService extends BaseService<User> implements IUserService{ @Override public List<User> findUser(User user) { return queryForList("user_queryAll",user); } @Override public User insert(User user){
insert("user_insert",user);
user = null;//故意设置为null,抛出异常 insert("user_inserts",user);
我的userService bean继承了BaseService
BaseService的声明:BaseService<T> extends SqlMapClientTemplate
<bean id="txManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory" />
<!-- 配置事务,采用接口代理来管理事务,须在Service实现中以 @Transactional标注来定义启用事务 -->
<!-- 默认情况下自动使用transactionManager -->
<tx:annotation-driven transaction-manager="txManager" />
你用注解事务代替你的配置事务。<context:component-scan base-package="com.suneee" />这个只配置一次就可以了
@Transactional(rollbackFor=Exception.class)//如果发生Exception异常了,就进行回滚
@Service("userService")
public class UserService extends BaseService<User> implements IUserService{ @Override
public List<User> findUser(User user) {
return queryForList("user_queryAll",user);
} @Override
public User insert(User user){
insert("user_insert",user);
user = null;//故意设置为null,抛出异常
insert("user_inserts",user);
return user;
}}
现在就是同一个方法,第二次插入数据报错后,第一条插入的数据不能回滚
贴一贴你的baseService吧,你的错误就表明userService bean需要引入sqlMapClient
贴一贴你的baseService吧,你的错误就表明userService bean需要引入sqlMapClient这个错误我解决了,通过在applicationContext.xml文件头上写default-autowire="byName" 解决了现在是事务不能回滚的问题
package com.suneee.service.base;import java.sql.SQLException;
import java.util.List;import org.springframework.orm.ibatis.SqlMapClientTemplate;
public class BaseService<T> extends SqlMapClientTemplate{
public static final int PAGE_SIZE = 15; public Object insert(String sqlId,Object baseClass){
Object baseClassResult = null;
try {
baseClassResult = (Object) super.getSqlMapClient().insert(sqlId,baseClass);
} catch (SQLException e) {
e.printStackTrace();
}
return baseClassResult;
}
public Object queryForObject(String sqlId,Object baseClass){
Object baseClassResult = null;
try {
baseClassResult = (Object) super.getSqlMapClient().queryForObject(sqlId,baseClass);
} catch (SQLException e) {
e.printStackTrace();
}
return baseClassResult;
}
public Integer delete(String sqlId,Integer id){
Integer number = null;
try {
number = super.getSqlMapClient().delete(sqlId, id);
} catch (SQLException e) {
e.printStackTrace();
}
return number;
}
public Integer deleteByObject(String sqlId,Object obj){
Integer number = null;
try {
number = super.getSqlMapClient().delete(sqlId, obj);
} catch (SQLException e) {
e.printStackTrace();
}
return number;
}
public Object queryById(String sqlId,Integer id){
Object baseClassResult = null;
try {
baseClassResult = (Object) super.getSqlMapClient().queryForObject(sqlId,id);
} catch (SQLException e) {
e.printStackTrace();
}
return baseClassResult;
}
public List<Object> queryListByPage(String sqlId,Object obj){
List<Object> list = null;
try {
list = (List<Object>) super.getSqlMapClient().queryForList(sqlId, obj);
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
public List<Object> queryListNoPage(String sqlId,Object obj){
List<Object> list = null;
try {
list = (List<Object>) super.getSqlMapClient().queryForList(sqlId, obj);
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
public int update(String sqlId,Object obj){
Integer number = null;
try {
number = super.getSqlMapClient().update(sqlId, obj);
} catch (SQLException e) {
e.printStackTrace();
}
return number;
}
//批量入库
public boolean insertBatch(String sqlId,List list){
Object obj = null;
try {
super.getSqlMapClient().startBatch();
for(int i=0; i<list.size(); i++){
obj = list.get(i);
super.getSqlMapClient().insert(sqlId,obj);
}
super.getSqlMapClient().executeBatch();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
public int getCount(String sqlId){
Integer i = null;
try {
i = (Integer) super.getSqlMapClient().queryForObject(sqlId);
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
}
public void insert(User user){
insert("user_insert",user);
user = null;//故意设置为null,抛出异常
insert("user_inserts",user);
throw new RuntimeException();
}