Java 使用级联保存父实体时,如何获取子实体id

Java 使用级联保存父实体时,如何获取子实体id,java,spring-data-jpa,Java,Spring Data Jpa,我使用的是spring数据jpa。将子实体添加到父实体后,我将父实体保存到数据库。我想得到孩子的id,但我发现我得到的是空的 我将@GeneratedValue(strategy=GenerationType.IDENTITY)添加到getId()方法中,但它不起作用 以下是模型: @实体 公共类父类{ 私有整数id; 私人名单儿童名单; @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) 公共整数getId(){ 返回id; } @OneToMan

我使用的是spring数据jpa。将子实体添加到父实体后,我将父实体保存到数据库。我想得到孩子的id,但我发现我得到的是空的

我将@GeneratedValue(strategy=GenerationType.IDENTITY)添加到getId()方法中,但它不起作用

以下是模型:

@实体
公共类父类{
私有整数id;
私人名单儿童名单;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
公共整数getId(){
返回id;
}
@OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinColumn(name=“parent\u id”)
公共列表getChildList(){
返回子列表;
}
//二传手。。。。。
}
@实体
公营儿童{
私有整数id;
私有字符串名称;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
公共整数getId(){
返回id;
}
@Cloumn(“名称”)
公共字符串getName(){
返回名称;
}
}
父实体已经在数据库中,所以我直接找到它,ParentRepository entends JpaReportory
以下是我的测试代码:

Parent-Parent=parentRepository.findById(1);
子项=新子项();
child.setName(“child”);
parent.getChildList().add(子级);
parentRepository.save(父级);
System.out.println(“孩子的id:+child.getId());
我得到的结果是:

child's id: null

子项保存到数据库并具有id,但内存中实体的id仍然为空,保存父项后如何获取子项id?因为我创建的子对象被其他对象引用,所以我需要在该子对象中获取id,而不是从数据库中查找新对象。

您必须使用save方法返回的值:

Parent parent = parentRepository.findById(1);
Child child = new Child();
parent.getChildList().add(child);
parent = parentRepository.save(parent); <---------- use returned value with ids set

System.out.println("child's id: " + parent.getChildList().get(0).getId()); <-- access saved child through parent list
Parent-Parent=parentRepository.findById(1);
子项=新子项();
parent.getChildList().add(子级);

parent=parentRepository.save(parent) 根据代码,您已经创建了
child
对象,并且没有为其元素设置任何值,然后尝试从新创建的对象(
child.getId()
)获取元素 除非您将DB中的值赋给它,否则它将始终为空

Parent parent = parentRepository.findById(1);
Child child = new Child(); // Empty child object created
parent.getChildList().add(child);
parentRepository.save(parent);

System.out.println("child's id: " + child.getId()); //Referring empty child object
这里您可以做的是:
在第5行中,我们为其分配了dB值

Parent parent = parentRepository.findById(1);
Child child = new Child(); // Empty child object created
parent.getChildList().add(child);
parent = parentRepository.save(parent);
child = parent.getChildList().get(0);// assing db value to it( assingning 1st value of `ChildList`)
System.out.println("child's id: " + child.getId()); //now Referring non-empty child object

返回的父对象是一个新的对象集,子对象也是,但是原始子对象被其他对象引用,我需要更新原始子对象的id,怎么办?但是这个子对象以前没有保存过,对吗?这是一个新的数据库条目?为了进一步了解为什么必须使用返回值@C.Weber,以下行将打印子对象值,而不是子对象的ID值
System.out.println(“子对象ID:+parent.getChildList().get(0))请更新代码accordingly@TheSprinter谢谢你的提示。在代码中添加了一个getID()。