关于spring注解事务的问题,高手赶快来啊

weblogicssl 2012-06-20 01:46:39
sysuser表里的id字段是主键
在dao里有两个方法,都是给表增加相同主键
在service里执行,但是出现主键重复错误后,第一条却插入到数据库了,没有出现事务回滚,麻烦问一下大家,我下面的这些代码,哪些错了?

Controller

@Controller
@RequestMapping("/aaa_crl")
public class Test {

@Autowired
private UserService userService;

private ModelAndView mav = new ModelAndView(
"directPayManage/directPayCreate_list");

@RequestMapping(params = "method=addUser")
public ModelAndView removePay(SysUser sysUser, HttpServletRequest request,
HttpServletResponse response) {
System.out.println(sysUser.getId());
try {
userService.addPerson();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

@RequestMapping(params = "method=open")
public ModelAndView open(SysUser sysUser, HttpServletRequest request,
HttpServletResponse response) {

mav.setViewName("aaa");
return mav;
}
}



UserService

@Service
public class UserServiceImpl implements UserService {

@Autowired
private SysUserDao sysUserDao;

@Transactional(rollbackFor=Exception.class)
public void addPerson() throws Exception {
sysUserDao.addPerson();
sysUserDao.addPerson2();
}
}

annomvc-servlet.xml

<context:annotation-config> <!--开启注解处理器--></context:annotation-config>



<!-- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
<context:component-scan base-package="mwr">
</context:component-scan>


<!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

<!-- ③:对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>

applicationContext.xml

<!--c3p0数据源配置-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
scope="singleton" destroy-method="close">
<property name="driverClass">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:oracle:thin:@192.168.0.2:1521:tzoral11</value>
</property>
<property name="user">
<value>test</value>
</property>
<property name="password">
<value>test</value>
</property>
</bean>


<!-- 使用 Spring事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 使用注解方式配置事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />

<!-- 配置业务bean -->
<bean id="sysUserDao" class="mwr.dao.SysUserDao">
<property name="dataSource" ref="dataSource"></property>
</bean>


aaa.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
<link rel="stylesheet" type="text/css" href="css/style.css" />
<script type="text/javascript" src="js/calendar.js"></script>
</head>
<body>
<form action="<%=path%>/aaa_crl.do?method=addUser"
method="post" id="form1" name="form1">
<input type="text" name="id"/>
<input type="text" name="name"/>

<input type="submit" value="提交"/>
</form>
</body>
</html>
...全文
191 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weblogicssl 2012-06-20
  • 打赏
  • 举报
回复
你写这个想表达什么?[Quote=引用 2 楼 的回复:]
Java code


<!-- 开启注解配置 -->
<context:annotation-config />

<context:component-scan base-package="com.service" />

<!-- 开启事务注解驱动 -->
<tx:annotation-driven />
……
[/Quote]
weblogicssl 2012-06-20
  • 打赏
  • 举报
回复
我要的是JDBC,不是hibenate[Quote=引用 3 楼 的回复:]
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<!-- Connection Info -->
<property name="driverClassName" value="${jdbc.driver}" />
<property name="u……
[/Quote]
敬敬11 2012-06-20
  • 打赏
  • 举报
回复
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<!-- Connection Info -->
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />

<!-- Connection Pooling Info -->
<property name="initialSize" value="${dbcp.initialSize}" />
<property name="maxActive" value="${dbcp.maxActive}" />
<property name="maxIdle" value="${dbcp.maxIdle}" />
<property name="defaultAutoCommit" value="false" />
</bean>

<!-- 数据源配置,使用应用服务器的数据库连接池 -->
<!--
<jee:jndi-lookup id="dataSource"
jndi-name="java:comp/env/jdbc/ExampleDB" />
-->

<!-- Hibernate配置 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="namingStrategy">
<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<prop key="hibernate.show_sql">
${hibernate.show_sql}
</prop>
<prop key="hibernate.format_sql">
${hibernate.format_sql}
</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop
key="hibernate.cache.provider_configuration_file_resource_path">
ehcache/ehcache-hibernate-local.xml
</prop>
</props>
</property>
<property name="packagesToScan"
value="org.huabo.talents.entity" />
</bean>

<!-- 事务管理器配置,单数据源事务 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" />

应该是这样的
  • 打赏
  • 举报
回复
	
<!-- 开启注解配置 -->
<context:annotation-config />

<context:component-scan base-package="com.service" />

<!-- 开启事务注解驱动 -->
<tx:annotation-driven />

<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="cmsOracle" />
</bean>
  • 打赏
  • 举报
回复
有什么问题?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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