我正在使用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);
}


如果有缺陷或有更好的方法,我将不胜感激。

10-05 17:51