Java 合并在JPA上下文中不起作用
这是我的简单代码:Java 合并在JPA上下文中不起作用,java,jpa,Java,Jpa,这是我的简单代码: public static void main(String[] args) { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("main"); EntityManager entityManager = entityManagerFactory.createEntityManager();
public static void main(String[] args) {
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("main");
EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
Team team1 = entityManager.find(Team.class, 0);
System.out.println(entityManager.contains(team1));
Team team2 = new Team();
System.out.println(entityManager.contains(team2));
entityManager.detach(team1);
System.out.println(entityManager.contains(team1));
entityManager.merge(team1);
System.out.println(entityManager.contains(team1));
transaction.commit();
entityManager.close();
}
输出为:
true
false
false
false
查看最后一个
false
,它应该是true,因为我将该实体合并到了实体管理器中。知道它为什么给出false吗?实体管理器将返回新实例:
team1 = entityManager.merge(team1)
3.2.4.1合并分离实体状态
合并操作允许
分离态的传播
将实体转换为持久实体
由EntityManager管理
合并操作的语义
适用于实体X的参数如下:
- 如果X是分离的实体,则X的状态将复制到预先存在的实体上 同一实体的托管实体实例X' 标识或X的新托管副本X' 是创建的
- 如果X是一个新的实体实例,则会创建一个新的托管实体实例X' X的状态被复制到 新的托管实体实例X'
- 如果X是一个已删除的实体实例,则将生成一个
由合并操作(或 事务提交将失败)IllegalArgumentException
- 如果X是托管实体,则合并操作将忽略它,
但是,合并操作是无效的
级联到引用的实体
来自X的关系,如果这些
已使用注释对关系进行了注释
级联元素值
或cascade=MERGE
注释cascade=ALL
- 对于X中关系引用的所有实体Y,具有
级联元素值
或cascade=MERGE
,Y递归合并 如“Y”。对于所引用的所有此类Y 十、 X'设置为参考Y'。(注 如果X被管理,那么X就是 与X'相同的对象。)cascade=ALL
- 如果X是一个合并到X'的实体,并引用另一个实体Y,其中
或cascade=MERGE
是 未指定,则为 X'的相同关联产生a 对托管对象Y'的引用,带有 与Y相同的持久标识cascade=ALL
team1=entityManager.merge(team1)这能解决您的问题吗?@AkifHadziabdic是的,可以!谢谢:)请随意写一个答案。