如何解决Transactionalpropagation = Propagation.REQUIRES_NEW没有在私有方法中打开新事务,而将相同的值作为参数传递
我正在使用jpa实体列表器类where和spring数据存储库。在@PreMethod更新中,如果我使用@Transactional(propagation = Propagation.REQUIRES_NEW)
,则直接从数据库中获取数据。如果我在called inside @PreMethod
的私有方法( getOldEmployee )上使用相同的事务注释,则不是从数据库中获取数据,而是使用相同的最新会话数据不确定为什么会发生这种情况
实体类
@Entity
@Table(name = "Employee")
@EntityListeners({EmployeeListener.class)
public class Employee extends AuditEntity implements Serializable {
}
监听器类
@Component
public class EmployeeListner{
@Autowired
EmployeeRepository employeeRepository;
@PreUpdate
@Transactional(propagation = Propagation.REQUIRES_NEW) //if use here I get the employee database value before updating the database
public void preUpdateEvent(Employee employee) {
Employee employee=getOldEmployee(employee);
}
private Employee getOldEmployee(Employee employee) { //if inspite of using @Transactional(propagation = Propagation.REQUIRES_NEW) in @PreMethod if use here I am not getting the database value rather getting latest value
Optional<Employee> getOldEmployeeOptional =employeeRepository.findById(employee.getId());
getOldEmployeeOptional
}
}
解决方法
Spring仅在 public 方法上应用事务性设置,在其他情况下,这些设置将被忽略。
从Spring文档中:
使用代理时,应应用@Transactional批注 仅适用于具有公开可见性的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。