问题是由于Hibernate的一级缓存导致的。当使用findOne和findById方法时,Hibernate首先会检查一级缓存中是否已经存在该记录。如果存在,则直接从缓存中返回,而不是从数据库中查询。
解决方法可以通过清除一级缓存来实现。具体的代码示例如下:
@Autowired
private EntityManager entityManager;
public void updateRecordWithTrigger() {
// 执行数据库更新操作的触发器后
// 清除一级缓存
entityManager.clear();
// 使用findOne或findById方法查询记录
YourEntity record = yourRepository.findOne(id);
// 或者
Optional<YourEntity> recordOptional = yourRepository.findById(id);
}
在代码中,我们首先注入一个EntityManager对象,然后在更新操作的触发器后,调用entityManager的clear()方法来清除一级缓存。这样,在使用findOne或findById方法时,Hibernate将不再从缓存中返回记录,而是重新查询数据库,从而可以看到对记录所做的更改。
注意:在清除一级缓存后,如果后续需要使用到该记录的其他数据,需要重新查询数据库来获取最新的数据。