Java Hibernate联接表生成大量查询

Java Hibernate联接表生成大量查询,java,hibernate,join,Java,Hibernate,Join,我正在使用hibernate,在使用联接查询时遇到了一些问题,出于某种原因,它会生成查询的分配。表格结构非常标准,如下所示: ----------------------------------- | invoice_product | ----------------------------------- | invpro_inv_id int | | invpro_pro_id int | -------

我正在使用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查询

出于某种原因,这会生成对数据库的查询分配。它创建一个查询以按预期获取发票,然后当它转到联接表位时,它生成大约300个select查询以获取发票的所有产品。在我看来,每个发票通常需要2个查询1选择发票,2创建连接以获取产品

所以我的问题是为什么hibernate会创建这么多查询。hibernate如何解释这一点?而且,这是唯一的办法来处理加入你自己

提前谢谢


编辑:已解决。对于那些想知道的人,添加@fetchmode.SUBSELECT注释可以解决这个问题。这只是我没有正确阅读文档的一个例子

可能是@talex的副本你是对的,该线程帮助我解决了我的问题。感谢你在正确的方向上指出@talex可能的重复。你是对的,那条线索帮助我解决了我的问题。谢谢你指出了正确的方向