我使用Hibernate 4和Spring Data JPA,我與FetchType.EAGER有ManyToOne關係,聯繫人有很多地址,我的問題是當我運行測試時我無法獲得填充收集的聯繫人實體,但如果我檢索地址實體,我可以訪問聯繫人實體。Hibernate 4和Spring Data JPA沒有填充集合
這是跟entitty代碼:
@Entity(name = "CONTACT")
public class ContactJPA {
@OneToMany(mappedBy = "contact", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Collection<AddressJPA> addresses;
//getters an setters
}
這是地址實體代碼:
@Entity(name = "ADDRESS")
public class AddressJPA {
@ManyToOne(optional=false)
@JoinColumn(name="CONTACT_ID", referencedColumnName = "CONTACT_ID", nullable = false)
private ContactJPA contact;
//getters an setters
}
要檢索和保存我使用CrudRepository從Spring框架的實體。
這是我的JUnit:
RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { JPAConfigurationTest.class })
@Transactional
@TransactionConfiguration(defaultRollback = true)
public class ContactRepositoryIntegrationTest {
@Autowired
ContactRepository contactRepository;
@Autowired
AddressRepository addressRepository;
AddressJPA addressJPA;
Integer key = 1;
@Before
public void setUp(){
addressJPA = new AddressJPA();
addressJPA = new AddressJPA();
addressJPA.setAddressId(new Integer(1));
addressJPA.setCountry("Argentina");
addressJPA.setCity("Cordoba");
addressJPA.setStreet("San Juan");
}
@Test
public void thatRetrieveContactShouldPopulateAddress(){
ContactJPA contact = new ContactJPA();
contact.setContactId(key);
contact.setEmail("[email protected]");
contact = contactRepository.save(contact);
addressJPA.setContactJPA(contact);
addressRepository.save(addressJPA);
AddressJPA retrievedAddress = addressRepository.findByAddressId(1);
System.out.println("Address " + retrievedAddress);
ContactJPA retrievedContact = contactRepository.findByContactId(key);
System.out.println(retrievedContact.toString());
assertNotNull(retrievedContact);
assertEquals(key, retrievedContact.getContactId());
assertEquals(1, contact.getAddresses().size());//this throws null pointer exception
Iterator<AddressJPA> it = contact.getAddresses().iterator();
assertEquals(addressJPA, it.next());
}
}
什麼建議嗎? 在此先感謝
我會問的第一個問題是你真的想在這種情況下的雙向關係?它們不是JPA所必需的,可能會變得過於複雜。 – jervine10