Spring Transaction和Hibernate读取未获取最新数据

我必须在数据库中插入一个实体。我正在使用Spring事务并休眠。但是在插入实体之前,我需要检查它是否已经存在,所以我向用户抛出了一个很好的异常。这是一个问题,我没有在列的实体上添加唯一约束,并且由于某种规模,我的数据库中存在重复的条目。

我有以下问题

  1. 首先,当我在插入之前搜索实体时,Spring事务为何找不到该实体。
  2. 在不使用悲观锁进行插入的情况下,防止它的可能方法是什么。

我的猜测是,Spring事务在启动事务之前会同时获取数据库的旧副本,如果有任何事务写入同一实体,则它会同时进行。我们将有重复的条目。

我在dto层中使用checkAndInsert方法,以下是我的服务层

@Transactional(readOnly = true)
public Record getByName(String name){
    return dao.getByName(name);
}

@Transactional
public void createRecord(Record record) {
    dao.persist(record)
}

@Transactional
public void checkAndInsert(Record record){
    if(getByName(record.getName()) != null){
        createRecord(record);
    }
}
yinghuochong512 回答:Spring Transaction和Hibernate读取未获取最新数据

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3160089.html

大家都在问