1

Two entities has bi-directional OneToOne relationship - Inverse Relationships. (as mentioned below) I want to lazy load behaviour with "LearnerProfile" while fetching "learner" from DB. Is this possible, if not, please provide some workaround.

LearnerProfile.java

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

Learner.java

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

2 Answers2

1

If you want to load LearnerProfile every time you load Learner, you can use EAGER in learnerProfile relationship:

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

But I don't recommend this. The EAGER, one time that exists in your code, it's really hard to remove after.

Another strategy is do a JPQL query with FETCH JOIN:

SELECT l from Learner l FETCH JOIN l.learnerProfile
Dherik
  • 17,757
  • 11
  • 115
  • 164
0

Don't use @OneToOne relation (almost always bad design decision). Instead use @Embedded + @Embeddable.

The Bitman
  • 1,279
  • 1
  • 11
  • 25