Good afternoon, Eclipselink community. I have a simple question for which hopefully there is a simple answer I'm overlooking. In a unit test I am writing, I have an entity:
@Entity
public class OptionalFieldEntity {
@Id
private int id;
...
@OneToOne(optional=false)
private OptionalFieldEntityB entB;
@OneToOne(optional=false, fetch=javax.persistence.FetchType.LAZY)
private OptionalFieldEntityB lazyEntB;
...
Now, by default a @OneToOne relationship is fetched EAGERly, but for this unit test's needs I need it to be lazily loaded. Before the meat of the test execution, I pre-populate the database and assign entB OptionalFieldEntityB(id=1) and lazyEntB OptionalFieldEntityB(id=2) -- the relationships refer to different child entities to ensure the lazy relationship won't benefit from the relationship that is eager by default. To avoid making the scenario more complicated I turn off the datacache with eclipselink.cache.shared.default=false.
I then close the em and emf and create a new one for the meat of the test. With the new emf/em, I fetch OptionalFieldEntity, and immediately rollback the transaction and close the em and emf. No getter/setter methods on the fetched entity are touched.
I then create a new emf so I can get an instance of PersistenceUnitUtil, and observe that the following assertion fails:
PersistenceUnitUtil puu = emf_test.getPersistenceUnitUtil();
assertFalse(puu.isLoaded(ofe_find, "lazyEntB"));
So my question is if Eclipselink really is disregarding the LAZY FetchType setting (since the spec says its a hint) then is there a way to make it honor that hint and actually not hydrate OptionalFieldEntity.lazyEntB?