0

我有两张桌子

Table 1 (Parent)
    parent_Id
    Name

Table2 (Child)
    child_Id
    Name
    Parent_id
    version

对应的类是

Class Parent
{
    Int parentId;
    String name;
    Set<Child> childList;

    @Id
    @Column(name="PARENT_ID")
    public int getParentId()
    {
       return parentId;
    }
   @Column(Name="NAME"
   public String getName()
   {
     return name;
   }
   @OneToMany(mappedBy="parent",fetch=FetchType.EAGER)
   @OrderBy("pareantId")

   public Set<Child> getChildList()
   {
      return childList;
   }

}

   Class Child {
      Int childId;
    String name;
    Parent parent;
    int age;

    @Id
    @Column(name="CHILD_ID")
    public int getId()
    {
       return childId;
    }
   @Column(Name="NAME"
   public String getName()
   {
     return name;
   }
   @ManyToOne
   @JoinColumn(name = "PARENT_ID", nullable = false) 
   public A getParent()
   {
      return parent;
   }

   public getAge()
   {
     return age;
   }

这是我的 DAO 类,如果我只在查询中使用(来自 parentId=1 的父项),它工作正常。

@Transactional
    public Parent getParentBy(int id) 
    {
        Parent parent = null;
        Session session = this.sessionFactory.getCurrentSession();
        try{
        parent =(Parent) session.createQuery("from Parent where parentId=? ).setParameter(0,id).uniqueResult();

        } catch (Exception e)
        {
            e.printStackTrace();
        }
        return parent;
    }

当我运行它时,我会在集合中获得该父项下的所有子项。

现在,如果我想在上面的同一个查询中为年龄添加 where 子句,我需要做什么?那可能吗?我们可以这样写吗

from Parent as a where a.parentId=? and a.childList.age> 10

从逻辑上讲,这看起来不合适。任何帮助将不胜感激。

谢谢

4

1 回答 1

1

看看文档。您可能需要在 HQL 中加入 Parent 和 childList。尝试类似:

from Parent as a 
left join a.childList as child with child.age> 10
where a.parentId=?

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-joins

于 2013-08-15T18:14:13.480 回答