反向关系,使用映射的目标外键

时间:2016-02-16 14:19:10

标签: java-ee mapping jpa-2.1

两个实体具有双向OneToOne关系 - Inverse Relationships.(如下所述) 我想从DB中获取“学习者”时使用“LearnerProfile”来延迟加载行为。 如果没有,请提供一些解决方法。

LearnerProfile.java

@OneToOne (fetch=FetchType.LAZY)
@JoinColumn(name = "LEARNER_ID")
private Learner learner ;

Learner.java

@OneToOne(mappedBy="learner", fetch=FetchType.LAZY)
private LearnerProfile learnerProfile ;

2 个答案:

答案 0 :(得分:1)

如果您想在每次加载学习者时加载LearnerProfile,可以在learnerProfile关系中使用EAGER:

@OneToOne(mappedBy="learner", fetch=FetchType.EAGER)
private LearnerProfile learnerProfile ;

但是我不推荐这个。 EAGER,有一段时间存在于您的代码中,之后才真正hard to remove

另一个策略是使用FETCH JOIN进行JPQL查询:

SELECT l from Learner l FETCH JOIN l.learnerProfile

答案 1 :(得分:0)

不要使用@OneToOne关系(几乎总是糟糕的设计决定)。而是使用@Embedded + @Embeddable。