我的问题很简单,但我不知道如何使Hibernate按我想要的方式工作: - 表MainTable具有带ParentTable的Many-2-One(with 100行)。 MainTable点至m = 26行了100行的在ParentTableHibernate在多对一生成m + 1查询
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "PARENT_ID")
@Fetch(FetchMode.JOIN)
当我简单地 “从MainTable”
查询它会产生26 + 1查询
当我跟踪查询,该第一个查询只加载26个以后查询使用的PARENT_ID。我想它应该有装载在第一查询整个PARENT_TABLE的方式..
请通过假设帮助:
- FetchType.EAGER是必须
- 从MainTable MT使用左连接取mt.parent父是确定的,但我们有很多的关联
避免N + 1选择问题:http://www.realsolve.co.uk/site/tech/hib-tip-pitfall.php?name=n1selects http://stackoverflow.com/questions/97197/what -is-the-n1-selecting-problem – 2012-08-07 18:08:07
@Pangea:谢谢,但在这里有一些评论:1)使用fetch连接是好的,但我们有大约十个父表。这将是最后的解决方案2)我们想要一个类似于在一对多取消选择,以便对MainTable进行1次查询,对于相关表 – 2012-08-08 00:30:01
@Fetch(FetchMode.JOIN)和@Fetch(FetchMode.SELECT)根本没有差异! o_0 – 2012-08-08 00:59:09