如何通过传递子对象列表来查找父对象列表

时间:2016-04-21 13:44:22

标签: java hibernate

我有2个实体类,即父和子

儿童班

public class Child{
@Id
@Column(name="childId")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int childId;


@ManyToOne(cascade = CascadeType.ALL)
 @JoinColumn(name = "childId")
public Parent parent;

以下是父类

public class Parent
    @Id
    @Column(name="parentId")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer parentId;

我有一个DAO方法如下

public List<parent> getParent(String executionStatus) {
        List<parent> parentList = null;
        Session session = null;
        try {
            session =sessionFactory.openSession();
            parentList = session.createQuery(
                    "from parent where executionStatus='"+executionStatus+"'     )
                    .list();


        }
        return parentList;
    }

我从服务类访问此方法为

    List<parent> parentList=userDAO.getParent("test");

我的问题是如何通过拥有父类列表

来检索子类列表

3 个答案:

答案 0 :(得分:0)

您可以按如下方式将映射添加到Parent

public class Parent {
    @Id
    @Column(name="parentId")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer parentId;

    @OneToMany(mappedBy="parent")
    private List<Child> children
}

另外我建议将@JoinColumn(name = "childId")更改为@JoinColumn(name = "parentId"),将其更改为Child中的多对一映射

答案 1 :(得分:0)

您可能需要具有从父级到子级的映射,如下所示:

@OneToMany(fetch = FetchType.LAZY)
private List<Child> children;

然后:

 parentList = session.createQuery(
                    "select p from Parent p join p.children c where p.executionStatus='"+executionStatus+"')
                    .list();

答案 2 :(得分:0)

你可以添加加入和检索孩子

childList = session.createQuery(
                    "from child c INNER JOIN c.parent p where p.executionStatus='"+executionStatus+"'     )
                    .list();