将持久或分离的hibernate对象与其当前的DB状态进行比较的最佳方法是什么?

时间:2011-04-19 18:52:08

标签: java hibernate spring

我正在使用Hibernate和Spring。

我正在编写一种服务方法来保存一个对象(一项费用),该对象具有非常具体的业务规则,关于何时允许根据当前的DB状态保存它。例如,如果charge.status.equals(Status.CANCELED),则不应更新。 (还有其他更具体的规则,但这应该是一个很好的例子)其他代码可能会加载已取消的费用并错误地将状态更改为已批准,然后调用保存(费用)。 save方法需要能够识别此错误,无论传入的费用是持久的还是分离的。

有没有一种简单的方法可以将内存中的对象与数据库中对象的当前持久状态进行比较?

1 个答案:

答案 0 :(得分:0)

我认为这会奏效:


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);
}

如果存在缺陷或有更好的方法,我当然会感激任何建议。