我有两张桌子
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;
}
当我运行这个时,我会让所有孩子都在该集合下面。
现在,如果我想在上面相同的查询中添加age的where子句,我需要做什么? 那可能吗? 我们可以这样写吗
from Parent as a where a.parentId=? and a.childList.age> 10
逻辑上这看起来不合适。任何帮助将不胜感激。
由于
答案 0 :(得分: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