【问题标题】:Named query to join 2 tables from another table从另一个表连接 2 个表的命名查询
【发布时间】:2014-09-28 17:37:59
【问题描述】:

我正在使用 hibernate 开发一个 Java EE 项目,我面临着一个类似于这个的类图:

我想要的是订购产品的客户列表。这意味着我的命名查询必须获得所需产品的 ID,并且我希望我的命名查询写入 Customer 类。

你能帮我解决这个问题吗?

这些是我的课:

@Entity
@Named Queries({
    /* NAMED QUERY THAT I M LOOKING FOR */
            })
public class customer implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "ID_CUSTOMER", nullable = false)
    private Integer idCustomer;

    @Size(max = 255)
    @Column(name = "NAME", length = 255)
    private String name;    

    @Size(max = 255)
    @Column(name = "EMAIL", length = 255)
    private String email;    

    @JoinColumn(name = "ID_ORDER", referencedColumnName = "ID_ORDER", nullable = true)
    @ManyToOne(optional = false)
    private GroupeAccess idOrder;  
}

@Entity
public class order implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "ID_ORDER", nullable = false)
    private Integer idOrder;

    private Date date;    

    @JoinTable(name = "order_product", joinColumns = {
        @JoinColumn(name = "ID_ORDER", referencedColumnName = "ID_ORDER", nullable = false)}, inverseJoinColumns = {
        @JoinColumn(name = "ID_PRODUCT", referencedColumnName = "ID_PRODUCT", nullable = false)})
    @ManyToMany
    private Collection<product> productCollection;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idCustomer")
    private Collection<customer> customerCollection;
}

@Entity
public class product implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "ID_PRODUCT", nullable = false)
    private Integer idProduct;

    private Date date;    

    @ManyToMany(mappedBy = "productCollection")
    private Collection<Acces> orderCollection;
}

【问题讨论】:

  • 我想为一个产品的所有订单选择客户,而不仅仅是一个订单

标签: hibernate hql named-query


【解决方案1】:

Select o.customerCollection from Order o where :product in o.productCollection

【讨论】:

  • 在优化方面,如果我有 10000 种产品,这个查询会很快工作吗?
  • 底层 SQL 将类似于 select c.* from customer c inner join order o on c.id_order = o.id inner join order_product op on o.id = op.id_order where op.id_product = ?.那就是三表连接。使用正确的索引应该足够快。
  • 嗯,我在这里得到的是“一个”产品订单的客户;如果我想要一个产品的所有订单的客户列表怎么办?
  • 你能直接在DB上执行我之前评论中提供的SQL查询吗?
  • 你给我的查询会给我一个客户集合对吗?
猜你喜欢
  • 2012-01-14
  • 2013-10-28
  • 2018-05-16
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
相关资源
最近更新 更多