@Test
public void testForcedLazyLoadingWithCascadedMerge() throws MalformedURLException {
EntityTransaction tx = em.getTransaction();
PersonEntity personEntity = new PersonEntity();
personEntity.setName(personAName);
PhoneEntity phoneEntity = JPATestUtils.createPhoneEntity(oldPhoneName);
LinkedList<PhoneEntity> oppList = new LinkedList<PhoneEntity>();
tx.begin();
em.persist(personEntity);
oppList.add(phoneEntity);
personEntity.setPhoneList(oppList);
phoneEntity.setPhoneOwner(personEntity);
em.persist(phoneEntity);
tx.commit();
em.clear();
personEntity = em.find(PersonEntity.class, personEntity.getId(),
Collections.singletonMap(QueryHints.MAX_FETCH_DEPTH, (Object) 3));
personEntity.getPhoneList();
Assert.assertEquals(personAName, personEntity.getName());
Assert.assertNotNull(personEntity.getPhoneList());
PhoneEntity p = personEntity.getPhoneList().get(0);
p.setName("new phone");
p.setType("new type");
Assert.assertNotNull(p.getPhoneOwner());
tx.begin();
em.merge(personEntity);
tx.commit();
personEntity = em.find(PersonEntity.class, personEntity.getId());
Assert.assertNotNull(personEntity.getPhoneList());
Assert.assertEquals(personEntity.getPhoneList().size(), 1);
PhoneEntity o = personEntity.getPhoneList().get(0);
JPATestUtils.verifyPhoneEntity(o, newPhoneName);
Assert.assertNotNull(o.getPhoneOwner(), "Person is null.");
Assert.assertEquals(o.getPhoneOwner().getId(), personEntity.getId(), "Account references are not same.");
}