Запрос гибернации в пользовательской коллекции - PullRequest
0 голосов
/ 04 октября 2011

У меня есть спящий режим с пользовательскими типами коллекций.

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.

Теперь мне нужно выполнить запрос, чтобы получить все объекты Policy, имеющие определенный PolicyStatus в качестве текущего.

Что-то вроде:

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 Ответ

1 голос
/ 04 октября 2011

Если ваш 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

...