当我使用查询 API 更新一行,然后在同一事务中使用标准 API 检索数据时,我得到的是旧值,而不是更新后的值。为什么会这样,我该如何解决这个问题?我需要获取更新的值。
@Service
@Transactional
public class ExampleServiceImpl implements ExampleService {
@Autowired
ExampleRepository exampleRepository;
@Transactional
public void example() {
ExampleEntity entity = (ExampleEntity) sessionFactory.getCurrentSession().createCriteria(ExampleEntity.class).add(Restrictions.eq("id", 190001L)).uniqueResult();
exampleRepository.updateState(190001L, State.CLOSED);
ExampleEntity updatedEntity = (ExampleEntity)sessionFactory.getCurrentSession().createCriteria(ExampleEntity.class).add(Restrictions.eq("id", 190001L)).uniqueResult();
assertEquals(State.CLOSED, updatedEntity.getState());
}
}
@Repository
public class ExampleRepositoryImpl implements ExampleRepository {
public void updateState(Long id, State state) {
String updateScript = "update exampleEntity set state= '%s', " +
"VERSION = VERSION + 1 " +
"where ID = %s;";
updateScript = String.format(updateScript, state, id);
Query sqlQuery = sessionFactory.getCurrentSession().createSQLQuery(updateScript);
sqlQuery.executeUpdate();
}
}
注意:如果我删除第一行并且没有在开头检索实体,一切都会按我预期的那样进行。
ITMISS
米脂
相关分类