在我看来,您正在尝试建立双向关系。这可以通过将映射添加到关系的两侧来实现。
例如,将@ManyToOne 映射添加到Child 实体。请注意,您可能应该删除您的 parentId 字段,因为现在您可以使用 child.getParent().getId() 访问它。
@Entity
public class Child {
@Id
private Integer id;
@ManyToOne
@JoinColumn(name = "parentId")
private Parent parent;
// Remove parentId field
// Getters + Setters ...
}
注意:如果您想保留 parentId 字段,您必须选择要用于插入的两个映射(getParentId() 或 getParent().getId())更新实体。另一个字段应该同时具有insertable = false 和updatable = false。
下一步是将@OneToMany 映射更改为使用mappedBy:
@Entity
public class Parent {
@Id
private Integer id;
@OneToMany(mappedBy = "parent") // Change this
private List<Child> children;
// Getters + Setters ...
}
如果您想检索特定子项及其父项,您现在可以为Child 实体创建一个存储库:
public interface ChildRepository extends JpaRepository<Child, Integer> {
}
之后,您可以使用以下方法获取特定的孩子:
Optional<Child> child = repository.findById(123); // 123 is the ID of the child in this case
Optional<Parent> parent = child.map(Child::getParent);
使用 Spring boot 1.x 将是:
Child child = repository.findOne(123);
Parent parent = null;
if (child != null) {
parent = child.getParent();
}