使用WHERE子句中的多对多集(连接表)进行查询

时间:2012-02-28 07:09:55

标签: java hibernate many-to-many hql

例如,我有像这样的映射文件

   <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映射到一个类。

1 个答案:

答案 0 :(得分:3)

您应该在wgere子句中使用您为连接实体指定的别名:

select p from Product p inner join p.retailers retailing 
where retailing.shop_id = :shopId

附注:您应该尊重Java命名约定:shopId而不是shop_id