【发布时间】:2012-08-26 17:48:29
【问题描述】:
是否可以阻止休眠自动更新持久对象?
@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);
}
}
这是代码中发生的事情,我检索了被休眠认为处于持久状态的实体,然后我更新了实体中的一些字段,然后将实体传递给验证。如果验证失败,则不更新,如果验证成功,则持久化实体。
这是此流程的主要问题:因为我更新了要在验证中使用的实体,所以无论我是否调用 persist() 方法(在 DAO 上)都没有关系,记录将始终是更新是因为休眠检测到实体已更改并将其标记为更新。
请记住,我可以改变我进行验证和解决问题的方式,所以我对解决方法不感兴趣。我很想知道如何禁用休眠功能,它会自动更新持久对象。
请记住,我使用的是休眠的 JPA 实现。所以处理休眠特定 API 的休眠特定答案对我不起作用。
我试图寻找休眠配置,看看我是否可以设置任何配置来阻止这种行为,但没有运气。
谢谢
——编辑—— 我找不到解决方案,所以我选择回滚事务而不抛出任何 RuntimeException,即使我在声明性事务中使用:
TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
这就像一个魅力。
【问题讨论】: