是的,这是的合同的一部分
Session.persist()。根据Hibernate文档,这是执行SQL的顺序:
- 按执行顺序插入
- 更新
- 删除收集元素
- 插入收集元素
- 按执行顺序删除
该顺序是官方Hibernate API的一部分,应用程序在操纵其实体图时会依赖它。
Session.persist()立即在
INSERT语句后进行更改会破坏该合同,并在某些用例中引起问题。
假设我们有一个
User实体,并且两个用户可能以某种方式彼此关联。然后,我们可以将两者插入一个事务中:
persist(user1);persist(user2);user1.setPartner(user2);user2.setPartner(user1);
如果所有内容都存储在
INSERT语句中,则在持久化时会违反外键约束
user1。
通常,通过确保仅传递给的状态以
persist结束
INSERT,Hibernate为我们提供了更大的灵活性来满足基础数据库的约束。
我不知道可以更改此行为的任何配置。当然,正如您提到的,
persist只要不违反数据库约束,就可以重组代码,以便在设置所有值之后调用该代码。



