【问题标题】:JPQL ManyToMany @JoinTable select query?JPQL ManyToMany @JoinTable 选择查询?
【发布时间】:2013-10-23 15:08:18
【问题描述】:

我有两个实体,即产品和交易,这两个实体通过多对多关系链接。我的交易实体中有以下内容。

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

当我运行我的项目时,我的数据库中将创建 3 个表表,它们分别是 Transaction、Product 和 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);

有什么帮助吗? :)

【问题讨论】:

  • 你不需要从那个表中获取数据,你想达到什么目的?
  • 您好。该 Transaction_Product 包含作为主键的事务 ID 和产品 ID。对于我的项目中的一个需求,我需要确保只有在没有为该产品进行交易的情况下才能删除该产品。因此,这解释了我要检查 Transaction_Product 的原因。如果 Transaction_Product 表中存在基于某个产品 ID 的行,则用户无法删除该产品。

标签: ejb netbeans-7 jpql


【解决方案1】:

检查是否有您可以使用的指定产品的交易:

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;

【讨论】:

    猜你喜欢
    • 2017-03-10
    • 2015-09-11
    • 2017-08-14
    • 2014-03-22
    • 2017-11-17
    • 1970-01-01
    • 2020-08-27
    • 2015-10-02
    • 2018-11-25
    相关资源
    最近更新 更多