为什么Hibernate从一个persist调用创建两个查询?

为什么Hibernate从一个persist调用创建两个查询?,hibernate,jpa,Hibernate,Jpa,我有以下课程: @Entity public class Person { @Id @GeneratedValue(strategy=GenerationType.TABLE, generator="tableGenerator") private Integer id; private String name; //getters and setters... } 以及以下单元测试方法: public void testCreatePerson() { Pers

我有以下课程:

@Entity
public class Person {

  @Id @GeneratedValue(strategy=GenerationType.TABLE, generator="tableGenerator")
  private Integer id;
  private String name;

  //getters and setters...
}

以及以下单元测试方法:

 public void testCreatePerson() {
    Person p1 = new Person();
    em.persist(p1);
    p1.setName("John Doe");
}
当我执行此测试时,Hibernate生成两个查询:

Hibernate: insert into Person (name, id) values (?, ?)
Hibernate: update Person set name=? where id=?
我不清楚为什么需要生成两个查询(插入和更新),而不是简单的插入。有人有主意吗

谢谢,


p、 s:如果我更改
em.persist(p1)的顺序
p1.setName(“John Doe”)
然后只生成一个insert,但在我看来这并不重要,因为在这两种情况下都可以使用相同的延迟insert。

在两条语句中,只要在调用setXXX之前没有触发insert,则显然不“需要”这样做。我很肯定其他JPA提供商不会为此做多个声明。@NeilStockton我也这么认为。insert语句未在
p1.setName(“John Doe”)之前刷新语句,所以在我看来,在所有情况下,一个简单的插入就足够了。