Hibernate生成的额外sql

时间:2013-09-19 10:56:07

标签: java hibernate

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

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

生成以下sql:

1)insert into entity
2)update set name = 

为什么即使在尽可能晚地刷新更改时它也会生成单独的更新sql?

1 个答案:

答案 0 :(得分:4)

这是Gavin(其中一个hibernate开发人员)here所解释的预期的Hibernate行为:

  

预期的Hibernate行为(我们一直在争论这是否真的正确!)是INSERT语句将完全插入调用save()时设置的数据。这为用户提供了更细粒度的控制,特别是在有触发器等的环境中。但是,如果你不小心,它可能会表现不佳。

     

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

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