1.事务加在DAO层还是service层?
service中可能多涉及多种DAO的操作,比如存了一个User之后,需要保存一条日志信息;如果在DAO中分别设置事务的话,一个DAO下面方法抛出异常了,但是不会影响到另一个DAO下面的方法,这是两个事务;因此事务要加在Service层;
2.需求:存一个user的同时,记录一个日志,说这个user被存了;
3.代码实现:--这边是spring管理hibernate下的transaction;
1)DAO实现:UserDAOImpl.java --保存User
package com.cy.dao.impl; import javax.annotation.Resource; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.stereotype.Component; import com.cy.dao.UserDAO; import com.cy.model.User; @Component public class UserDAOImpl implements UserDAO { @Resource private SessionFactory sessionFactory; //保存User public void save(User user) { Session s = sessionFactory.getCurrentSession(); s.save(user); } }
2)DAO实现:LogDAOImpl.java --保存Log
package com.cy.dao.impl; import javax.annotation.Resource; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.stereotype.Component; import com.cy.dao.LogDAO; import com.cy.model.Log; @Component("logDAO") public class LogDAOImpl implements LogDAO { @Resource private SessionFactory sessionFactory; //保存日志信息 public void save(Log log) { Session s = sessionFactory.getCurrentSession(); s.save(log); throw new RuntimeException("error!"); } }