我是否需要在第二种方法中添加@Transactional注释?我想不是,但真的不确定。
@Transactional
public void addUser(User u) {
u.setCreationDate(new Date());
userDAO.addUser(u);
}
// should I add @Transactional annotation here?
public User addUser(String name, String surname) {
User user = new User();
user.setName(name);
user.setSurname(surname);
this.addUser(user);
return user;
}
// DAO method
public void addUser(User u) {
entityManager.persist(u);
}
答案 0 :(得分:2)
您需要将@Transactional
注释添加到public User addUser(String name, String surname)
方法,否则该方法将以非事务方式执行。
@Transactional
使用代理机制来实现事务支持,只有当你从第二个对象调用方法时才会调用它(即如果你在同一个类中调用一个方法,它将不会通过代理系统,所以它将始终使用调用者事务运行。)
答案 1 :(得分:1)
两者都是不同的方法,因为签名是diff,因此需要添加@Transactional注释。 如你所知,spring正在研究代理对象
答案 2 :(得分:0)
如果使用默认值,则无需注释包装器方法
@Transactional
次设置。 PROPAGATION
中的@Transactional
设置定义
交易范围。默认传播设置为PROPAGATION_REQUIRED
。
有关详细信息,请参阅here。
答案 3 :(得分:0)
在你的情况下,它会产生类似的结果。不同之处在于,如果您在public User addUser(String name, String surname)
上放置@Transactional,您将在事务的上下文中创建新用户。如果不这样做 - 只有在代码执行public void addUser(User u)