自定义集合上的Hibernate查询

时间:2011-10-04 11:29:45

标签: java hibernate hql hibernate-criteria

我有一个带有自定义集合类型的hibernate映射。

的java:

class Policy {
...
private HistoryMap<Date, PolicyStatus> statusHistory;
...
}

的hbm.xml:

    <map name="statusHistory" inverse="true" table="tbl_policy_in_time" order-by="PolIt_ValidFrom desc"
                    collection-type="be.pensionarchitects.admindb.infrastructure.hibernate.HistoryMapType">
                ...
    </map>

HistoryMapType是接口HistoryMap的实现,并实现UserCollectionType

此地图的方法getCurrent()会返回当前的PolicyStatus

现在我需要进行查询以获取具有特定PolicyStatus的所有Policy对象作为当前对象。

类似的东西:

Criteria crit = getSession().createCriteria(Policy.class)
                .createAlias("statusHistory.current", "status")
                .add(Restrictions.or(
                        Restrictions.eq("status.code", "active"),
                        Restrictions.eq("status.code", "sleeper")));

我理解这不起作用,因为“当前”不是关联映射。我该如何解决这个问题?我已经读过我应该使用HQL,但不知道如何以及是否可能。

任何指针都表示赞赏!

由于

1 个答案:

答案 0 :(得分:1)

如果您的HistoryMap实现java.util.Map(并尊重接口的合同),那么您可以使用Criteria API。如果没有,我认为它不适用于HQL(以及Criteria API)。在这种情况下,使用本机SQL是最好的选择。您可以创建一个本地查询,其结果是marshaleld到特定的Hibernate Bean:

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#d0e13696