我有一个 Java 类(我们称它为 BigClass),它有一个 Map 作为属性(Map< MyClass, Integer >),我想做的是进行 HQL 查询以根据这张 map 。
事实上,我想做的是恢复满足 MyClass b.map.get(m) > 0 的特定实例 (m) 的 BigClass 的所有实例 (b)。
例如:我想恢复 BigClass 的一个实例,如果它的映射有一个像 < m, 2 > 这样的条目,我不想恢复一个 BigClass 的实例,如果它的映射有一个像 < m , 0 > 或者如果 m 不属于映射键。
我一直在搜索,我发现这篇文章与我的问题相关:
Using HQL to query on a Map's Values
虽然,它并没有给我一个解决方案。
这些是我一直在尝试但没有成功的一些查询:
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) ]
提前致谢...
最佳答案
如果条件是一个选项,这可能会起作用
session.createCriteria(BigClass.class)
.joinAlias("map", "entry")
.add(Restrictions.eq("entry", session.load(MyClass.class, id))
.list();
关于java - 使用 HQL 在 map 中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056216/