Hibernate HQL с интерфейсами - PullRequest
       35

Hibernate HQL с интерфейсами

3 голосов
/ 20 февраля 2010

Согласно этому разделу документации Hibernate, я должен иметь возможность запрашивать любой класс Java в HQL

.

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-polymorphism

К сожалению, когда я запускаю этот запрос ...

"from Transaction trans where trans.envelopeId=:envelopeId"

Я получаю сообщение «Транзакция не сопоставлена ​​[из транзакции trans, где trans.envelopeId =: envelopeId]».

Транзакция - это интерфейс, я должен к классам сущностей, которые его реализуют, я хочу по HQL-запросу вернуть коллекцию типа Транзакция.

Ответы [ 3 ]

11 голосов
/ 20 февраля 2010

Действительно, согласно документации Hibernate на Полиморфные запросы :

Hibernate запросы могут называть любую Java класс или интерфейс в предложении from. Запрос вернет экземпляры всех постоянные классы, которые расширяют это Класс или реализовать интерфейс. следующий запрос вернет все постоянные объекты:

from java.lang.Object o

Именованный интерфейс может быть осуществляется различными постоянными Классы:

from Named n, Named m where n.name = m.name

Но поскольку интерфейс не отображается (и, следовательно, неизвестен), вам нужно использовать полное имя в вашем HQL-запросе:

from qualified.name.Transaction trans where trans.envelopeId=:envelopeId

будет возвращать экземпляры всех постоянных классов, которые реализуют ваш Transaction интерфейс.

1 голос
/ 20 февраля 2010

Попробуйте импортировать интерфейсы, чтобы не указывать полный путь. Я использую файл с именем import.hbm.xml для обработки всех интерфейсов:

<hibernate-mapping package="com...path.to.implementations">
  <import class="com.path.to.interfaces.Transaction" rename="Transaction"/>
...
</hibernate-mapping>

Затем добавьте это в конфигурацию, как обычный файл сопоставления.

0 голосов
/ 20 февраля 2010

Я думаю, вам нужно отобразить интерфейс как родительский класс, а реализующие классы - как его подкласс.

http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#inheritance-strategies

...