2013-10-15 1 views
1

У меня есть 2 объекта, а именно Продукт и Транзакция, и эти 2 сущности являются ссылками через отношения Many to Many. У меня есть следующее в моей транзакции.JPQL ManyToMany @JoinTable выбрать запрос?

@ManyToMany(cascade={CascadeType.ALL}) 
    @JoinTable(name="Transaction_Product") 

Когда я запускаю мой проект, будет 3 таблицы таблицы, созданные в моей базе данных, и они являются сделки, Продукт и Transaction_Product соответственно. Transaction_Product автоматически генерируется при запуске моего проекта.

Я могу получить элементы из таблицы транзакций по этому запросу ниже.

Query q = em.createQuery("SELECT t FROM Transaction t WHERE t.fulfillStatus = 0"); 

Мой вопрос: как получить предметы из таблицы Transaction_Product?

Я попробовал что-то вроде запроса ниже, и это не сработало.

Query q = em.createQuery("SELECT bt FROM Transaction_Product bt WHERE bt.ProductID = 1); 

Любая помощь пожалуйста? :)

+0

вам не нужно, чтобы получить данные из этой таблицы, чего вы хотите достичь? –

+0

Привет. Этот Transaction_Product содержит идентификатор транзакции и идентификатор продукта в качестве первичного ключа. Для одного из требований в моем проекте мне нужно убедиться, что продукт можно удалить только в том случае, если для продукта нет транзакции. Следовательно, это объясняет причину, по которой я хочу проверить Transaction_Product. Если в таблице Transaction_Product есть строки, основанные на определенном идентификаторе продукта, пользователь не может удалить продукт. –

ответ

1

проверка, если есть операции с specifyed продуктом и может использовать:

Query q = em.createQuery("SELECT t FROM Transaction t join t.products p WHERE p.id = :id"); 

Предполагая, что Transaction класс имеет поле:

@ManyToMany(cascade={CascadeType.ALL}) 
    @JoinTable(name="Transaction_Product") 
private Set<Product> products; 
+0

спасибо! Это сработало! знак равно –