我有一个被映射为具有一组对象的对象,非常简单。但是,我真正想做的是为该映射设置一些标准。这是当前的映射:
<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等。
干杯, 杰森
答案 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