Hibernate Join表会生成大量查询

时间:2016-09-28 13:37:28

标签: java hibernate join

我正在使用hibernate并使用连接查询遇到一些问题,由于某种原因它会生成所有的查询。表结构非常标准如下:

-----------------------------------
|       invoice_product           |
-----------------------------------
| invpro_inv_id int               |
| invpro_pro_id int               |
-----------------------------------

-----------------------------------
|            invoice              |
-----------------------------------
| inv_id int                      |
| ....etc...                      |
-----------------------------------

-----------------------------------
|            product              |
-----------------------------------
| pro_id int                      |
| ....etc...                      |
-----------------------------------

抓取对象并将其映射到我的域模型的代码:

Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("select f from " + Invoice.class.getName() + " f");
List<Factuur> factuurList = query.list();
session.flush();

这里是实体中的相关代码:

public class Invoice {

  --- omitted -------


    @LazyCollection(LazyCollectionOption.FALSE)
    @OneToMany
    @JoinTable(
            name = "invoice_product",
            joinColumns = @JoinColumn(name = "invpro_inv_id", referencedColumnName = "inv_id"),
            inverseJoinColumns = @JoinColumn(name = "invpro_pro_id", referencedColumnName = "pro_id")
    )
    private Set<Product> productSet;



------- omitted ----------
}

正如你所看到的,我让hibernate几乎可以处理所有事情。我没有创建一些自定义SQL查询。

由于某种原因,这会向数据库生成所有查询。它创建了1个查询以按预期获取发票,然后当它转到连接表位时,它会生成大约300个选择查询以获取发票的所有产品。我认为这通常需要每个发票2个查询(1选择发票,2创建联接以获取产品)。

所以我的问题是为什么hibernate会创建这么多查询。 hibernate如何解释这个?而且,这是解决这个问题的唯一方法吗?

提前致谢

修改:已解决。对于那些想知道的人,添加@Fetch(FetchMode.SUBSELECT)注释可以解决问题。这只是我没有正确阅读文档的情况!

0 个答案:

没有答案