那就在你的业务方发上或者类上加个@Transactional 业务类上加@Service 如果 @Transactional加在类上,那么这个类的公共方法都有事务, 然后你还要启动spring配置文件,写个测试类调用 public class Test { public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
A a = (A) ac.getBean("a"); a.updateFlag() } }@Transactional @Service public class A{ String id; boolean flag = false; }
public classB{ String id; String idA;// 对象A的id值 }
public void method(){ updateFlag(List<A> aList); selectFlag(List<B> bList); }
public void updateFlag(List<A> aList){ // 更新aList 中对象A的flag 为 true }
public void selectFlag(List<B> bList){ // 查询 bList 中B对象属性 idA // 更具idA去数据库查询记录 对应的flag }
只要你的事务边界在 method 方法上面就可以保证它们共享单一物理连接,也就在同一个事务中,这个时候不管事务隔离级别是什么我们在同一个事务中看到的状态值都是一致的。要是感觉它们像是互相不能感知对方的状态,那可能是它们用了两个不同的物理连接也就是两个事务在运行(这时候根据数据源引用上配置的事务隔离级别的不同,有些能感知,有些不能感知)。至于 Spring 如何来声明事务的边界 (transaction demarcation)我并不清楚,应该是在 xml 配置中完成的,期望其它有实践经验的大神来解答怎么配置合适的事务界定声明。
其实最好让spring自动管理
spring事务管理是这么写的:<!-- 事务管理器配置,单数据源事务 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
lazy-init="true">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
业务类上加@Service
如果
@Transactional加在类上,那么这个类的公共方法都有事务,
然后你还要启动spring配置文件,写个测试类调用
public class Test { public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
A a = (A) ac.getBean("a"); a.updateFlag() }
}@Transactional
@Service
public class A{
String id;
boolean flag = false;
}
public classB{
String id;
String idA;// 对象A的id值
}
public void method(){
updateFlag(List<A> aList);
selectFlag(List<B> bList);
}
public void updateFlag(List<A> aList){
// 更新aList 中对象A的flag 为 true
}
public void selectFlag(List<B> bList){
// 查询 bList 中B对象属性 idA
// 更具idA去数据库查询记录 对应的flag
}
你这样,试试。