例如,我有像这样的映射文件
<class name="my.test.model.Product" table="PRODUCT">
...
<set name="retailers" table="product_shop" lazy="false">
<key column="PRODUCT_ID" />
<many-to-many column="SHOP_ID" class="my.test.model.Shop" />
</set>
...
</class>
现在我想查询特定商店A的产品。想到这样的事情:
String searchHql = "select p from Product p inner join p.retailers retailing where p.retailers.shop_id = :shopId";
@SuppressWarnings("unchecked")
List<Product> productList = sessionFactory.getCurrentSession().createQuery(searchHql ).setInteger("shopId", shopId).list();
但它不起作用。返回的错误是:
无法解析属性:shop_id:my.test.model.Shop。我搜索了很多,但仍然没有找到正确的方法来访问hql中的“多对多”子集。这可能吗?或者我需要将Product_Shop表映射到模型类?
UPDATE :因为似乎没有其他方法,我最终将Product_Shop映射到一个类。
答案 0 :(得分:3)
您应该在wgere子句中使用您为连接实体指定的别名:
select p from Product p inner join p.retailers retailing
where retailing.shop_id = :shopId
附注:您应该尊重Java命名约定:shopId
而不是shop_id
。