Java JPA编辑前分离

Java JPA编辑前分离,java,jpa,orm,Java,Jpa,Orm,以下关于JPA的代码块之间有什么区别: private void sample1(){ Entity entity=em.find(1); em.detach(entity); entity.setProperty(property); em.persist; } 及 假设两个方法都在事务上下文中 第一个方法将生成一个EntityExistsException,因为您将试图持久化一个已经设置了id字段的实体。如果在这里使用merge而不是persist,这将

以下关于JPA的代码块之间有什么区别:

 private void sample1(){
    Entity entity=em.find(1);
    em.detach(entity);
    entity.setProperty(property);
    em.persist;
 }


假设两个方法都在事务上下文中

第一个方法将生成一个
EntityExistsException
,因为您将试图持久化一个已经设置了id字段的实体。如果在这里使用merge而不是persist,这将是合适的代码。但是,如果您更新的属性是id本身,那么它可能会工作(除非有一些依赖项已被急切加载,否则您可能会遇到一些问题)

在第二个示例中,您不需要调用merge,因为持久性提供程序在事务提交时(在方法返回时)会自动更新实体

 private void sample2(){
    Entity entity=em.find(1);
    entity.setProperty(property);
    em.merge;
 }