【问题标题】:How to do custom-query based collection mappings in Hibernate?如何在 Hibernate 中进行基于自定义查询的集合映射?
【发布时间】:2010-09-30 17:56:18
【问题描述】:

我有一个对象被映射成一组对象,非常简单。但是,我真正想做的是在该映射上设置一些标准。这是当前的映射:

    <set name="ops" inverse="true" cascade="all, delete-orphan">
        <key column="cityblock_id" on-delete="cascade"/>
        <one-to-many class="com.tamedtornado.data.Operation"/>
    </set>

现在,我不想只获取所有相关的操作,而是只获取尚未完成、已经完成或其他的操作。 Hibernate 文档对此非常安静,尽管一些旧论坛帖子向我展示了一些内容。您显然可以使用 sql-query 标记,但这也不是我想要做的。

有没有办法用 HQL 查询来做到这一点?我只是想通过一个简单的查询来缩小结果范围,并有一些集合图,比如 active_ops 和 completed_ops 等。

干杯, 杰森

【问题讨论】:

    标签: java xml hibernate mapping hql


    【解决方案1】:

    在 Hibernate 文档中的 6.2. Collection mappings 下,您会发现可以在任何集合映射上使用 WHERE 子句:

    where(可选)指定在检索或删除集合时要使用的任意 SQL WHERE 条件(如果集合应仅包含可用数据的子集,则很有用)

    您说您想使用 HQL 查询,但我认为这是不可能的。但是由于您只需要在映射中指定一个简单的 WHERE 子句,因此 HQL 和“真正的”SQL 之间并没有太大的区别。

    【讨论】:

      【解决方案2】:

      我不确定我是否清楚地理解了您的问题,但您似乎需要在 SQL 查询中使用 where 子句

      您应该能够在 HQL 中使用 where 子句或在 hibernate 中使用条件 api 来实现所需的结果:

      假设您有一个名为“活动”或“已完成”的状态字段,您的 HQL 应该如下所示:

      from ops where status="active"
      

      或者如果使用标准 api:

      List activeOperations = sess.createCriteria(Operation.class)
          .add( Restrictions.equals("status", "active") )
          .list();
      

      hibernate 教程的第 14 章和第 15 章讲了一点: http://www.hibernate.org/hib_docs/v3/reference/en/html/index.html

      【讨论】:

        猜你喜欢
        • 2011-03-11
        • 2016-09-22
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        • 2014-12-02
        • 2012-09-28
        • 2021-12-12
        • 1970-01-01
        相关资源
        最近更新 更多