我的休眠配置中有以下映射,该映射正在创建带有复合主键的表:
<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。
是否有实现此目的的正确方法?