如何在Hibernate中进行基于自定义查询的集合映射?

时间:2009-01-11 04:24:07

标签: java xml hibernate mapping hql

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

    <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等。

干杯, 杰森

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

我不确定我是否清楚地理解了您的问题,但似乎您需要在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