【发布时间】:2015-10-08 18:29:29
【问题描述】:
在我的 Spring JPA/Data MySQL 应用程序中,我有以下实体:
public class Gene implements Serializable {
@Id
@Column(name = "uid")
private String uid;
@OneToOne(fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "gene")
private GeneStory geneStory;
}
和
public class GeneStory implements Serializable {
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "gene_uid", referencedColumnName = "uid")
private Gene gene;
}
我正在尝试通过
加载所有Gene
Query q = em.createQuery("select g from Gene g")
return q.getResultList();
我得到N+1 selects problem 和GeneStory
现在,在数据库中的每个 Gene 上,我都有针对 GeneStory 的附加查询,如下所示:
select genestory0_.story_id as story_id1_7_0_ ... from gene_stories genestory0_ where genestory0_.gene_uid=?
GeneStory 的延迟加载由于某种原因不起作用。
在gene_stories 表的数据库层我也有一个约束——
CONSTRAINT `fk_gene_stories_gene_uid`
FOREIGN KEY (`gene_uid`)
REFERENCES `gene` (`uid`)
如何解决这个 N+1 选择问题?我不想将GeneStory 与Gene 一起加载。我需要在需要时延迟加载它们。
【问题讨论】:
标签: mysql spring hibernate jpa spring-data