Запрос с набором «многие ко многим» (объединенная таблица) в предложении WHERE - PullRequest
2 голосов
/ 28 февраля 2012

Например, у меня есть файл сопоставления, подобный этому

   <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 Ответ

3 голосов
/ 28 февраля 2012

Вы должны использовать псевдоним, назначенный присоединенной сущности в предложении wgere:

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

Примечание: вы должны соблюдать соглашения об именах Java: shopId вместо shop_id.

...