2

我有一个 Java 类(我们称之为 BigClass),它有一个 Map 作为属性(Map< MyClass,Integer >),我想做的是进行 HQL 查询以根据此地图的值过滤这些类。

实际上,我想做的是恢复 BigClass 的所有实例 (b),它们满足 MyClass b.map.get(m) > 0 的特定实例 (m)。

例如:我想恢复一个 BigClass 的实例,如果它的 map 有一个类似 < m, 2 > 的条目,我不想恢复一个 BigClass 的实例,如果它的 map 有一个类似 < m, 0 > 的条目或者如果 m 不属于映射键。

我一直在搜索,发现这篇文章与我的问题有关:

使用 HQL 查询地图的值

虽然,它没有给我一个解决方案。


这些是我一直在尝试但没有成功的一些查询:

org.hibernate.QueryException: No index value! 
[SELECT e FROM BigClass e WHERE ( map[(SELECT b FROM MyClass b WHERE b.id = ?)] > 0) ]

org.hibernate.QueryException: No index value! 
[SELECT e FROM BigClass e WHERE ( index(map) = (SELECT b FROM MyClass b WHERE b.id = ?) ) > 0) ]

提前致谢...

4

2 回答 2

0

如果条件是一个选项,这可能会起作用

session.createCriteria(BigClass.class)
    .joinAlias("map", "entry")
    .add(Restrictions.eq("entry", session.load(MyClass.class, id))
    .list();
于 2012-10-26T11:44:49.043 回答
0

感谢您的回答。我已经通过删除括号之间的 SELECT 解决了这个问题,这是被禁止的!

我只是将对象添加为查询的参数,这很有效。

于 2012-10-29T15:24:15.277 回答