如何在jpa中选择一对多关系中的孩子

时间:2018-06-04 12:46:06

标签: java spring-boot jpa spring-data jpql

我想选择我想要的孩子的父母。

但是当我选择我的父母时,我必须展示所有的孩子

我该怎么做?

示例:

public class parent{
    private Integer id;
    @OnetoMany
    @JoinColumn(name="parentId")
    private List<child> children;
}

public class child{
    private Integer id;
    private Integer parentId;
}

findByIdAndchildType(Integer id, String type)

我想看:父(id) - &gt;孩子(类型)

但我可以看到父母(身份证) - &gt;儿童(othertype),儿童(othertype1),儿童(类型)

1 个答案:

答案 0 :(得分:0)

听起来你正试图获得双向关系。这可以通过将映射添加到关系的两端来实现。

例如,向@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 = falseupdatable = 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();
}