Java JPA编辑前分离
以下关于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,这将
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;
}