2

我正在尝试使用 session.save 保存对象,如下所示:

beginTransaction();
sessionFactory.getCurrentSession().save(entity);
entity.setName("Entity " + Math.random());
commitTransaction();

生成以下sql:

1)insert into entity
2)update set name = 

即使尽可能晚地刷新更改,为什么还要生成单独的更新 sql?

4

1 回答 1

4

这是 Gavin(休眠开发人员之一)在此处解释的预期休眠行为:

预期的 Hibernate 行为(我们已经讨论过这是否真的正确!)是 INSERT 语句将准确插入调用 save() 时设置的数据。这为用户提供了更细粒度的控制,尤其是在有触发器等的环境中。但是,如果你不小心,它可能会表现得很糟糕。

为避免 INSERT-then-UPDATE,只需在保存之前完全初始化对象。

但是,如果您对此不满意(在我的情况下,使用扩展持久性上下文时真的很烦人):这里有一个 Hibernate 3.5.6_final 补丁改变这种行为。

于 2013-09-19T11:21:20.357 回答