从Spring Boot 2.0.6升级到2.1.0后,readOnly标志处理发生了变化。以下代码成功保存了客户,而2.1.0中的相同代码则没有。在2.1.0中,save方法仅返回相同的Customer实体,而不会填充id列。
原因可能与此票有关: https://jira.spring.io/browse/SPR-16956
@Service
@Transactional(readOnly = true)
public class CustomerService {
private final CustomerRepository customerRepository;
public CustomerService(CustomerRepository customerRepository) {
this.customerRepository = customerRepository;
}
public Customer save(Customer customer) {
return customerRepository.save(customer);
}
}
此外,如果您有一个将readOnly标志设置为true的服务,而调用了另一个将readOnly标志设置为false的服务,则不会保存任何数据。
@Service
@Transactional(readOnly = true)
public class FirstService {
private final SecondService secondService;
public Foo save(Foo foo) {
return secondService.save(foo);
}
}
@Service
@Transactional(readOnly = false)
public class FirstService {
private final SecondService secondService;
@Transactional(readOnly = false)
public Foo save(Foo foo) {
return secondService.save(foo);
}
}
尽管这种新行为可能是正确的,但它会在不通知的情况下中断现有应用程序。所以我的问题是: