在HashMap上使用内部联接的HQL NamedQuery

时间:2013-10-29 16:39:07

标签: java mysql sql hibernate named-query

我正在开发一个JSF项目并在mysql上使用Hibernate

您可能知道(它在Hibernate文档中),连接使用实体之间的关联。因此,使用内部联接的示例正确查询将是:

select from Person p join p.classes c where c.room = :roomNum
在我的例子中,关联实体是包含所需实体的HashMap。 一些代码会有所帮助:

public FamilyGuy{

private String name;
private BigDecimal income;
private HashMap<String, Child> children = new HashMap<Language, Child>();
....
} 

public Child{
private String name;
private BigDecimal expenses;
....
}

我需要的是这样的查询(以下查询不起作用):

select from FamilyGuy oppressed inner join Child happy where happy.expenses < :threshold

我得到的例外是:

javax.servlet.ServletException: Path expected for join!

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

select f from FamilyGuy f 
inner join f.children child
where child.expenses < :threshold

就像任何其他toMany协会一样。

正如你所说;加入使用关联。因此,您无法指定实体的名称(join Child),但必须指定关联:join f.children ...就像您问题开头的示例中一样。