【问题标题】:hibernate query for fetching entity on multiple collection values用于在多个集合值上获取实体的休眠查询
【发布时间】:2013-01-22 21:20:35
【问题描述】:

我想获取一个包含两个匹配集合实体的实体。

public class A {
    long id;
    Set<B> bs;
}

public class B {
    String name;
    String value;
}

如果我有下表数据

Table A
ID     Name 
1      pluto
2      earth
3      mars

Table B
ID     A_ID     NAME     VALUE
1       1       abc       123
2       1       xyz       789
3       2       abc       456
4       2       xyz       789
5       3       abc       123

我想获取至少有 1 个 B 且 name='abc' 和 value='123' 和 1 B 且 name='xyz' 和 value='789' 的所有“A”。在此示例中,我只想要名为“pluto”的 A,因为“earth”没有正确的“abc”值,并且 mars 缺少“xyz”。

我必须使用子选择来执行此操作吗?

【问题讨论】:

    标签: hibernate hql


    【解决方案1】:

    您可能希望在 A 和 B 之间使用一对多关联...

    http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/associations.html#assoc-unidirectional-12m

    ...之后您可以找到大量查询该关联的示例,例如....

    HQL and one-to-many queries

    【讨论】:

    • 是的....我的实体映射得很好,并且正在使用休眠进行查询。我的新要求是这个额外的查询。 “Java Persistence with Hibernate”和 hibernate ref docs 中有一些示例,它们展示了如何在给定集合中“B”实体的值的情况下选择“A”实体 - 但没有一个涉及如何处理寻找“A”具有两个具有特定值的不同“B”。
    • 虽然不准确,但底部链接是一个非常相似的问题。如果你稍微调整一下这个答案,你会找到你的解决方案。可能类似于“从 A 中选择 a 作为左连接 a.bs 作为 b where b.name='abc' and b.value='123'”。
    • 您的情况很容易理解 - 但我需要选择 A 和 b.name='abc' 和不同的 b.name='xyz' 的情况 - 并且只有那些 A。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2012-03-12
    • 2016-12-20
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多