具有相同值的Hibernate更新表没有session.save或session.update

时间:2012-03-15 02:35:29

标签: hibernate

具有相同值的Hibernate更新表,没有session.save或session.update

我们如何加载对象(数据库中的一行)并将其保存回来而不更改任何字段值。

我们需要hibernate为该行发出一个UPDATE查询,并且加载的值相同。 我们在Hibernate和JDBC之间有一个中间件,它可以改变数据,而hibernate正在进行UPDATE。

我们尝试过session.replicate但它正在删除该对象的所有集合。 即

class User{
        Set<Order> orders; //inversely mapped

    }
    class Order{
        User user;
    }

while doing session.replicate(user) it is issueing a following SQL

update ORDER set user=null where id=?   

这意味着我们正在失去所有关系。

session.save或session.update不会工作,因为我们在传递给hibernate之前没有更改值。

还有其他方法可以强制hibernate考虑修改所有字段,并且应该更新数据库吗?

1 个答案:

答案 0 :(得分:0)

您可以实现preflushListener来设置所有要更改的实体,并为此类设置dynamicupdate="false"

我认为您可以查看并扩展其中一个:

DefaultFlushEventListener.java
DefaultFlushEntityEventListener.java