在 HashMap 上具有内部联接的 HQL NamedQuery

Posted

技术标签:

【中文标题】在 HashMap 上具有内部联接的 HQL NamedQuery【英文标题】:HQL NamedQuery with inner join on a HashMap 【发布时间】:2013-10-29 16:39:07 【问题描述】:

我正在开发一个 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】:
select f from FamilyGuy f 
inner join f.children child
where child.expenses < :threshold

就像任何其他 toMany 关联一样。

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

【讨论】:

感谢您的简短而成熟的回答,在您的查询中,您选择 FamilyGuy 吗?如果我想选择孩子,这个查询是否正确: select child from FamilyGuy f inner join f.children child where child.expenses

以上是关于在 HashMap 上具有内部联接的 HQL NamedQuery的主要内容,如果未能解决你的问题,请参考以下文章

具有内部联接的重复列

具有相同计数值的两个表之间的内部联接

使用具有多个条件的内部联接

具有内部联接、多个分组依据和最小最大值的 Linq 查询

在双错误类型的连接列中使用 NA 的 data.table 内部/外部连接?

在双错误类型的连接列中使用 NA 的 data.table 内部/外部连接?