spring 对于在同一事务服务中读取和写入的两个方法,在写入方法事务将数据提交到DB之前读取数据

to94eoyn  于 2023-04-19  发布在  Spring
关注(0)|答案(1)|浏览(137)

我的服务有两个方法persistLatitude和findLatitude

@Service
@Transactional
public myservice1{
 void persistLatitude (Long Latitude){
      //some code
}   
Long findLatitude (){
  //some code
}

假设我在我的DB表中持久化纬度29° 52' N,但方法persistLatitude继续运行一些其他任务。根据我的理解,由于transactional annotation,只有当整个方法完成执行时,我的更改才会提交到DB。
在此过程中,rest endpoint接收到一个请求,请求从DB表中查找纬度29° 52' N。由于method未完成,因此该事务尚未提交,因此findLatitude将无法在表中找到29° 52' N
当创建这个值的事务没有完全完成时,我可以做些什么来使findLatitude检索这个纬度?

jdgnovmf

jdgnovmf1#

你所要求的特性被称为“隔离级别读取未提交”。你可以将它应用于类或方法:

@Transactional(isolation = Isolation.READ_UNCOMMITTED)
Long findLatitude (){
    //some code
}

Postgres和Oracle不支持此功能。主要是因为副作用,如幻影或不可重复读取。

相关问题