2013-10-15 81 views
1

我有2個實體,即Product和Transaction,這兩個實體通過多對多關係鏈接。我在交易實體中具有以下內容。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包含交易ID和產品ID作爲主鍵。對於我的項目中的一項要求,我需要確保只有在沒有爲產品進行交易時才能刪除產品。因此,這解釋了我想檢查Transaction_Product的原因。如果Transaction_Product表中存在基於特定產品ID的行,則用戶無法刪除該產品。 –

回答

1

檢查是否有與specifyed產品交易u可以使用:

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

謝謝!有效! =) –