JPA EntityManager:为什么在merge()上使用persist()?
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> EntityManager.merge() 可以插入新对象并更新现有对象。 为什么要使用 persist() (只能创建新对象)? #1楼 无论哪种方式都会将实体添加到PersistenceContext中,区别在于您之后对实体执行的操作。 Persist接受实体实例,将其添加到上下文并使该实例得到管理(即将跟踪对该实体的未来更新)。 合并创建实体的新实例,从提供的实体复制状态,并管理新副本。 您传入的实例将不会被管理(您所做的任何更改都不会成为交易的一部分 - 除非您再次调用合并)。 也许代码示例会有所帮助。 MyEntity e = new MyEntity(); // scenario 1 // tran starts em.persist(e); e.setSomeField(someValue); // tran ends, and the row for someField is updated in the database // scenario 2 // tran starts e = new MyEntity(); em.merge(e); e.setSomeField(anotherValue); // tran ends but the row for someField is not