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

Java 如何在Hibernate中自定义基于查询的集合映射?,java,xml,hibernate,mapping,hql,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 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查询标记,但我也不想这样做

对于HQL查询,是否仍然可以执行此操作?我只想通过一个简单的查询缩小结果范围,并有一些集合映射,比如活动的和完成的集合映射,等等

干杯,
Jason

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

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

假设您有一个名为status的字段,用于“active”或“completed”,您的HQL应该如下所示:

from ops where status="active"
或者如果使用标准api:

List activeOperations = sess.createCriteria(Operation.class)
    .add( Restrictions.equals("status", "active") )
    .list();
hibernate教程的第14章和第15章对此进行了一些讨论:

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

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

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