如何阻止 Hibernate 自动更新持久化对象?
@Transactional
public ResultTO updateRecord(RequestTO requestTO) {
Entity entity = dao.getEntityById(requestTO.getId());
// now update the entity based on the data in the requestTO
ValidationResult validationResult = runValidation(entity);
if(validationResult.hasErrors()) {
// return ResultTO with validation errors
} else {
dao.persist(entity);
}
}
在这段代码中,我检索了一个被Hibernate视为持久状态的实体,然后更新实体中的一些字段,并将该实体传递给验证。如果验证失败,则不更新,如果验证成功,则持久化实体。
这个流程的主要问题是:因为我更新了实体以供验证使用,所以无论是否调用persist()方法(在DAO上),记录都将始终被更新,因为Hibernate检测到实体已更改并标记它需要更新。
请注意,我可以改变验证方式来解决此问题,因此不想尝试其他解决方法。我想知道如何禁用Hibernate自动更新持久化对象的功能。
请注意,我正在使用Hibernate JPA的实现。因此,处理Hibernate特定API的Hibernate特定答案对我没有作用。
我尝试查找Hibernate配置并查看是否可以设置任何配置来停止此行为,但没有成功。
谢谢
-- 编辑 ---
我找不到解决方法,所以我选择回滚事务而不抛出任何RuntimeException,即使我处于声明性事务中,使用:
TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
这个方法非常有效。