2013-10-15 83 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

谢谢!有效! =) –