Java Hibernate联接表生成大量查询
我正在使用hibernate,在使用联接查询时遇到了一些问题,出于某种原因,它会生成查询的分配。表格结构非常标准,如下所示:Java Hibernate联接表生成大量查询,java,hibernate,join,Java,Hibernate,Join,我正在使用hibernate,在使用联接查询时遇到了一些问题,出于某种原因,它会生成查询的分配。表格结构非常标准,如下所示: ----------------------------------- | invoice_product | ----------------------------------- | invpro_inv_id int | | invpro_pro_id int | -------
-----------------------------------
| 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可能的重复。你是对的,那条线索帮助我解决了我的问题。谢谢你指出了正确的方向