强制hibernate插入而不选择语句
我试图将一条新记录插入到一张我知道手头独特的表格中。 我试过在对象上调用save(),但在执行任何INSERT之前会执行一堆SELECT语句,我不想这样做,因为我知道该对象已经是唯一的。
我正在为每个事务打开一个新会话,我可以看到这是一个问题,但这是我的域的约束。 有没有办法强制Hibernate在INSERT之前不做任何SELECT?
您可以使用persist()方法而不是save()。
https://forum.hibernate.org/viewtopic.php?f=1&t=1011405
但是,与save()不同,persist()不保证将在持久化实例上立即设置标识符值。
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();
并查看产生的陈述。