我读到了有关弹簧/休眠状态下的传播和隔离的信息。
我有一种特定的方法
0. @Transactional (the default spring annotation)
1. read several rows
2. some business logic
3. read (from other table using some data from the first read)
在我看来,这有点不安全。如果其他人在步骤2中删除了行,该怎么办?
我认为我应该将方法注释更改为
@Transactional(readOnly = true, isolation = Isolation.SERIALIZABLE)
这是针对我的特定情况的有效解决方案吗? (任务是修复引起系统问题的事务注释,并尽可能减少其他代码行)
提前致谢。
最佳答案
如果我理解您的情况,则您有某种方法,可以从数据库中进行多次读取。
因此,如果您的方法只是从数据库读取的,那么您只需要具有如下注释:@Transactional(readOnly = true, isolation = Isolation.SERIALIZABLE)
因为实际上您只是从数据库中读取。
但是,如果您的方法同时提供对数据库读写的访问权限,则最好的方法是将其分为两种方法,其中之一是readOnly。