[英]JPA implicit flush at end of transaction not happening
我有一个标记为org.springframework.transaction.annotation.Transactional的方法
@Transactional
private void bob(String userName){
User user = userRepo.getUser(userName);//autowired repo finds User domain Object
user.setSomeDate(new Date());
}
然后我在循环中调用此方法
for(String userName: userNames ){
System.outPrintln("something happens before we cal it again.");
bob(userName);
}
存储库查找用户,并且没有记录异常。
我的理解是,脏用户对象是一个托管实体,在事务退出时将被保存。
我真正看到的是租用事务方法bob时用户被刷新。 因此,如果执行后for循环有3个用户名,我可以去查看前2个用户在数据库中获取日期,而第三个用户永远不会刷新到db并保持无日期。 因此,我的理解似乎是错误的。 我想念什么?
问题是您的方法是私有的,默认情况下,Spring只能在从另一个类调用的公共方法中启动事务。 您可以使用AspectJ解决此问题。
从春季文档
方法可见性和@Transactional
使用代理时,应仅将@Transactional注释应用于具有公共可见性的方法。 如果使用@Transactional注释对受保护的,私有的或程序包可见的方法进行注释,则不会引发任何错误,但是带注释的方法不会显示已配置的事务设置。 如果需要注释非公共方法,请考虑使用AspectJ(请参见下文)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.