代码之家  ›  专栏  ›  技术社区  ›  Thorsten

休眠条件-查询n:m关系中的表

  •  0
  • Thorsten  · 技术社区  · 16 年前

    我正在尝试为以下场景构建一个具有休眠条件的查询:

    • 两个实体:指标和报表(每个实体都有自己的表、类等)
    • 指标可用于零对多报表中
    • 报表使用零到多个指标
    • 因此,我有一个交叉表来存储关系
    • 关系在两个类及其休眠映射中定义。
    • 在用户界面中,用户可以选择一个或多个报表(除其他外),我想查询数据库中这些报表中使用的指标。

    我试过以下方法:

    criteria.add(Restrictions.in("Reports", selectedReports));
    

    但我得到的只是一个奇怪的SQL语句

    where this_.Indicator_ID in (?)
    

    然后是JDBC异常(缺少参数)

    有什么想法吗?谢谢。

    注:我已经调查过 Querying ManyToManyrelationship with Hibernate Criteria ,但可接受的解决方案是生成自定义SQL字符串…

    3 回复  |  直到 16 年前
        1
  •  4
  •   zmf    6 年前
      Criteria c = session.createCriteria(Indicator.class);
        c.add(Restrictions.eq("someField", myObject).createCriteria("reports")
        .add(Restrictions.eq("reportName", name);
        c.list();
    

    您需要为在某个其他实体的集合中保留的实体创建子条件。

    String[] selectedReportsId = {"1", "2", "3"};
     c.add(Restrictions.eq("someField",myObject).createCriteria("reports")
        .add(Restrictions.in("id", selectedReportsId);
    

    然后查看有关从这里转换结果的信息: https://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/querycriteria.html#querycriteria-associations

    此外,这可能会对您可以使用标准执行的操作提供一些帮助: http://www.hibernate.org/hib_docs/v3/api/org/hibernate/criterion/Restrictions.html

        2
  •  0
  •   duffymo    16 年前

    如果必须这样做,下面是谷歌在搜索“hibernate hql-many-to-many”后返回的几个建议:

    http://patf.net/blogs/index.php?blog=2&c=1&more=1&pb=1&tb=1&title=many_to_many_in_hql

    从Hibernate论坛:

    http://forum.hibernate.org/viewtopic.php?p=2340747&sid=d4c8d2fcc16aed0201f73eb74619692a

    在春季论坛上:

    http://forum.springframework.org/showthread.php?t=36870

    希望这些帮助。

        3
  •  0
  •   Thorsten    16 年前

    现在,这就是我让它工作的方式(感谢ZMF)。

    Criteria subcrit = criteria.createCriteria("Reports");
    Disjunction dis = Restrictions.disjunction();
    for (Reports r : selectedReports) {
        dis.add(Restrictions.idEq(r.getID()));
    }
    subcrit.add(dis);
    

    这几乎正是ZMF所建议的,我所添加的只是从传递的集合中分离来构建条件。

    剩下要做的就是尝试直接使用集合…