具有复合主键的Hibernate HQL查询在地图上

时间:2018-09-25 16:38:40

标签: java hibernate hql composite-key

我的休眠配置中有以下映射,该映射正在创建带有复合主键的表:

<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的所有“ items”。

我尝试了几次HQL查询(如下所示),但无济于事。

第一种方法

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)) 

第二种方法:

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

这给出了一个例外:org.hibernate.QueryException:无法取消引用标量集合元素:source_id

第三种方法:

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

这给出了例外: org.hibernate.PropertyAccessException:调用my.package.SourceProperties.id的getter时发生了IllegalArgumentException。

是否有实现此目的的正确方法?

0 个答案:

没有答案