我有一个带有自定义集合类型的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,但不知道如何以及是否可能。
任何指针都表示赞赏!
由于
答案 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