0

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

爪哇:

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是 interfaceHistoryMap和 implements的实现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,但不知道如何以及是否可能。

任何指针表示赞赏!

谢谢

4

1 回答 1

1

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

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

于 2011-10-04T13:36:32.700 回答