我正在使用spring-data-jpa。将子级添加到父级实体后,我将父级保存到数据库中。我想得到孩子的身份证,但发现我得到的是空值。
我在getId()方法中添加了@GeneratedValue(strategy = GenerationType.IDENTITY),但是没有用。
这是型号:
@Entity
public class Parent {
private Integer id;
private List<Child> childList;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id")
public List<Child> getChildList() {
return childList;
}
// setters.....
}
@Entity
public class Child {
private Integer id;
private String name;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
@Cloumn("name")
public String getName() {
return name;
}
}
父实体已经在数据库中,所以我直接找到它,ParentRepository引用了JpaReportory
这是我的测试代码:
Parent parent = parentRepository.findById(1);
Child child = new Child();
child.setName("child");
parent.getChildList().add(child);
parentRepository.save(parent);
System.out.println("child's id: " + child.getId());
我得到的输出是:
child's id: null
孩子被保存到数据库并具有ID,但是内存中实体的ID仍然为null,在保存父对象之后如何获得孩子的ID?而且由于我创建的子对象被其他对象引用,因此我需要在该子对象中获取ID,而不是从数据库中查找新对象。
答案 0 :(得分:1)
您必须使用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
答案 1 :(得分:0)
根据代码,您已创建child
对象,并且未为其元素设置任何值,然后尝试从新创建的对象(child.getId()
)中获取元素
除非您从数据库为其分配值,否则它将一直为空。
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
在这里您可以做的是:
在第五行,我们已经将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