Hibernate HQL-запрос на карте с составным первичным ключом - PullRequest
0 голосов
/ 25 сентября 2018

В моей конфигурации гибернации есть следующая карта, которая создает таблицу с составным первичным ключом:

<hibernate-mapping>
    <class name="my.package.Item" table="item"
        ...
        <map name="itemSources" table="item_source" lazy="false">
            <key>
                <column name="item_id" />
            </key>
            <map-key-many-to-many class="my.package.SourceProperties" column="source_id"/>
            <element type="text" node="externalId">
                <column name="external_id"/>
            </element>
        </map>
        ...
    </class>
</hibernate-mapping>

Я пытаюсь запросить все «элементы», для которых «itemSources» включает в себя определенныйID источника.

Я пробовал несколько запросов HQL (показанных ниже), но безрезультатно.

1-й подход

select it.id from Item it where :srcid in elements (it.itemSources)

Это приводит к запросу значения карты, т.е. external_id (в отличие от ключа карты):

... where ('4' in (select itemsour2_.external_id from item_source itemsour2_ 
where item1_.id=itemsour2_.item_id)) 

2-й подход:

select it.id from Item it where :srcid in elements (it.itemSources.source_id)

Это дает исключение: org.hibernate.QueryException: невозможно разыменовать скалярный элемент коллекции: source_id

3-й подход:

select it.id from Item it join it.itemSources itsources where index(itsources.id) = :srcid

Это дает исключение: org.hibernate.PropertyAccessException: IllegalArgumentException произошел вызов вызывающего метода my.package.SourceProperties.id

Существует ли правильный способдостичь этого?

...