强制休眠插入而不选择语句

时间:2011-09-28 19:39:57

标签: java database hibernate jboss persistence

我正在尝试将一条新记录插入到一​​张我知道手头独特的表格中。我已经尝试在对象上调用save(),但在执行任何INSERT之前会执行一堆SELECT语句,我不想​​这样做,因为我知道该对象已经是唯一的。

我正在为每个事务打开一个新会话,我可以看到这是一个问题,但这是我的域的约束。有没有办法强制Hibernate在INSERT之前不做任何SELECT?

3 个答案:

答案 0 :(得分:8)

您可以使用persist()方法而不是save()。

https://forum.hibernate.org/viewtopic.php?f=1&t=1011405

但是,与save()不同,persist()不保证在持久化实例上立即设置标识符值。

https://forum.hibernate.org/viewtopic.php?t=951275

答案 1 :(得分:2)

Hibernate正在尝试确定对象是否是瞬态的,所以在SELECT之前执行INSERT。您可以从Hibernate OneToOne mapping executes select statement before insert; not sure why调整此答案以避免SELECT

或者,我记得在论坛中有一篇关于覆盖hibernate在瞬态检查(以及乐观锁定)中使用的version列的帖子。我找到它时会编辑这个答案。

答案 2 :(得分:1)

Hibernate不会发出select来查看某个对象在save()上是否唯一。实际上,当您调用save()时,Hibernate甚至不会发出插入内容。当您flush()或提交交易时会发生这种情况。您需要确切了解选择的内容以及启动它们的内容。为了帮助缩小范围,您可以编写一个快速测试,如

Session session = openSession();
Transaction tx = session.beginTransaction();
session.save(myObject);
tx.commit();

并查看产生的陈述。