2017-06-09 77 views
0

所以,我有兩個實體:刷新一個一對多加入過了一會兒關係

Person.java

@Entity 
@Table(name = "persons") 
public class Person { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    @OneToMany(mappedBy="person", cascade = CascadeType.REMOVE) 
    @JsonIgnoreProperties("person") 
    private Set<Address> addresses; 

    //getters and setters 

} 

Address.java

@Entity 
@Table(name = "addresses") 
public class Address { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    @NotNull 
    @ManyToOne 
    @JoinColumn(name = "person_id", nullable = false) 
    @JsonIgnoreProperties("addresses") 
    private Person person; 
    //getters and setters  
} 

後來在我的代碼中我有一個personDb對象(已保存在數據庫中),然後我添加地址:

Address address = new Address(); 
address.setPerson(personDb); 
address = addressRepository.save(address); 

現在我有地址對象與人物附加到它,但我的personDb仍然沒有任何地址附加到它。即使我嘗試從數據庫中獲取它一次:

personRepository.findOne(personDb.getId());

我有null應該設置的地址。我也試圖改變我的Person類註釋是這樣的:

@OneToMany(mappedBy="person", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE) 

或改變CascadeType的所有,但沒有什麼幫助。將數據添加到數據庫之後,我可以如何將地址加載到我的personDb對象?

回答

0

這不是最好的解決辦法,但要儘量也增加新的地址personDB。

Address address = new Address(); 
address.setPerson(personDb); 
personDB.addAddress(address); 
personRepo.save(personDB) 
0

確保該人持續存在。

對於做一個集成測試它。如果您使用的是Spring,我還建議您使用內存數據庫進行測試。

@Transactional 
@Test 
public void testFindOneAddress(){ 

// persist the person 
Person person = new Person(); 
... 
personRepository.save(person); 

// persist the address 
Address address = new Address(); 
address.setPerson(person); 
addressRepository.save(address); 

// find the persisted person and addresses 
Person queryResult= personRepository.findOne(person.getId()); 
assertNotNull(queryResult); 
assertNotNull(queryResult.getAddresses()); 
assertEquals(1, queryResult.getAddresses().size()); 
assertEquals(address.getId(), queryResult.getAddresses().get(0).getId()); 

} 

另外,還要確保你的人的ID列被稱爲 「PERSON_ID」

public class Person { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "person_id") 
    private Integer id; 

從那裏