applicationContext.xml配置
<!-- 配置sessionFactory,默认采用hibernate配置文件上的配置来获取数据源等等 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle10gDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/fxj/hib/hbm/Userinfo.hbm.xml</value>
<value>com/fxj/hib/hbm/Userdetail.hbm.xml</value></list>
</property>
</bean>
<!-- 配置事务处理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 配置事务拦截器 -->
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
<!-- 配置beanName自动代理生成器 -->
<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor" ref="transactionInterceptor" />
</bean>
<!-- 配置beanName自动代理器生成器 -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<!--拦截Service层-->
<value>*Service</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!--此处增加新的Interceptor-->
</list>
</property>
</bean>
LoginServiceImpl代码
package com.fxj.service.impl;
import com.fxj.hib.dao.UserdetailDAO;
import com.fxj.hib.dao.UserinfoDAO;
import com.fxj.hib.hbm.Userdetail;
import com.fxj.hib.hbm.Userinfo;
import com.fxj.hib.hbm.UserinfoId;
import com.fxj.service.LoginService;
public class LoginServiceImpl implements LoginService {
private UserinfoDAO userinfoDAO;
private UserdetailDAO userdetailDAO;
/**
* @return the userinfoDAO
*/
public UserinfoDAO getUserinfoDAO() {
return userinfoDAO;
}
/**
* @param userinfoDAO the userinfoDAO to set
*/
public void setUserinfoDAO(UserinfoDAO userinfoDAO) {
this.userinfoDAO = userinfoDAO;
}
/**
* @return the userdetailDAO
*/
public UserdetailDAO getUserdetailDAO() {
return userdetailDAO;
}
/**
* @param userdetailDAO the userdetailDAO to set
*/
public void setUserdetailDAO(UserdetailDAO userdetailDAO) {
this.userdetailDAO = userdetailDAO;
}
public boolean login(String username, String password) {
//用户表
Userinfo userinfo = new Userinfo();
UserinfoId userinfoId = new UserinfoId();
userinfoId.setId("1");
userinfoId.setUsername("wang");
userinfoId.setPassword("wang");
userinfo.setId(userinfoId);
userinfoDAO.save(userinfo);
//用户明细表
Userdetail userdetail = new Userdetail();
userdetail.setId("1");
userdetail.setFirstname("姓");
userdetail.setLastname("名字");
userdetail.setEmail("xxx@163.com");
userdetail.setPhone("1380000000");
userdetailDAO.save(userdetail);
return true;
}
}
当用户表、用户明细表有任意表更新处理异常,2个表都会回滚