gpt4 book ai didi

java - 调用 EntityManager.merge() 时未设置 ID

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:35 25 4
gpt4 key购买 nike

我在 2 个对象父子对象之间有一个简单的 OneToMany 关联,如下所示。

父实体

    @Entity
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Version
private Long version;

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
List<Child> children = new ArrayList<Child>();

....
}

子实体

    @Entity
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Version
private Long version;
...
}

以下是我的测试,它加载一个现有父级添加一个子级并在父级上调用 EntityManager.merge()。

    @Test
public void testParent(){
Parent parent = (Parent) dao.loadParent(Parent.class, parentId);

Child c = new Child();
c.setName("c");

parent.getChildren().add(c);

dao.mergeEntity(parent);

Assert.assertNotNull(c.getId());
}

测试id主键的断言失败。我看到记录被正确插入到数据库中,同时自动分配了主键。

我所有的 DAO 调用都包含在需要传播的事务中。

最佳答案

EntityManager.merge(..) 获取一个实例并返回一个被管理的实例。在 transient 实例的情况下,它返回一个新实例(不修改原始实例)

所以你的 mergeEntity(..) 方法应该返回 em.merge(entity)

关于java - 调用 EntityManager.merge() 时未设置 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6197843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com