将持久或分离的休眠对象与其当前数据库状态进行比较的最佳方法是什么?

| 我正在使用Hibernate和Spring。 我正在编写一种服务方法来保存对象(费用),该对象具有非常具体的业务规则,关于何时允许基于其当前数据库状态保存该对象。例如,如果charge.status.equals(Status.CANCELED)不应更新。 (还有其他更具体的规则,但这应该是一个很好的示例。)其他代码可能会加载已取消的费用并错误地将状态更改为已批准,然后调用save(charge)。无论传递的费用是持久性费用还是分离性费用,save方法都必须能够识别此错误。 有没有一种简单的方法可以将内存中的对象与数据库中对象的当前持久状态进行比较?     
已邀请:
我认为这会起作用:
public void save(Charge charge) {
    Session session = sessionFactory.getCurrentSession();
    Charge copy = new Charge(charge);
    session.refresh(charge);
    ...
    //various business logic checks between copy and charge
    ...
    session.saveOrUpdate(charge);
}
如果有缺陷或有更好的方法,我当然会提出任何建议。     

要回复问题请先登录注册