强制hibernate插入而不选择语句

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

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

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

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

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

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

Hibernate试图确定对象是否是瞬态的,所以在INSERT之前执行SELECT 。 您可能能够从Hibernate OneToOne映射中调整此答案, 在插入之前执行select语句; 不知道为什么要避免SELECT

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

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

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

并查看产生的陈述。