2017-06-09 148 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; 

从那里