2014-01-11 50 views
1

我想通过RESTFUl服务在嵌套关系的窗体中保存2个对象。也就是说,一个办公室有2名员工。如何在春天保存嵌套的json对象mvc

然而,正如你可以从下面的示例中看到的,没有保存的办公室,我就无法知道officecode为20.在不:

“officecode”:“20”

虽然json对象是嵌套的,但是,我保存了员工和办公室,但他们没有关联。

如何保存嵌套对象在1提交然后?

实体的样子:

// Property accessors 
    @Id 
    @Column(name = "OFFICECODE", unique = true, nullable = false, length = 10) 
    public String getOfficecode() { 
     return this.officecode; 
    } 
.... 


    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "office") 
    public Set<Employee> getEmployees() { 
     return this.employees; 
    } 

这里是REST调用保存办公室:

@RequestMapping(value = "/Office", method = RequestMethod.POST) 

@ResponseBody 

public Office newOffice(@RequestBody Office office) { 

officeService.saveOffice(office); 

return officeDAO.findOfficeByPrimaryKey(office.getOfficecode()); 

} 

这里是我已经发布了JSON对象:

{ 
"state":"CA", 
"country":"USA", 
"officecode":"20", 
"city":"Vancouver", 
"phone":"+1 650 219 4782", 
"addressline1":"100 Market Street", 
"addressline2":"Suite 300", 
"postalcode":"94080", 
"territory":"NA", 
"employees":[ 
{ 
"extension":"x5800", 
"employeenumber":2001, 
"lastname":"joe", 
"firstname":"joe", 
"email":"[email protected]", 
"reportsto":null, 
"jobtitle":"President", 
"pay":null, 
"officecode":"20" 
}, 
{ 
"extension":"x5800", 
"employeenumber":2002, 
"lastname":"mary", 
"firstname":"mary", 
"email":"[email protected]", 
"reportsto":null, 
"jobtitle":"Vice President", 
"pay":null 
"officecode":"20" 
} 
] 

} 
+0

我更新了答案,请参阅以下如何填充从员工表到外部表的外键。 –

+0

你有没有去过它? –

回答

2

OK你正在使用Cascade,但它仍然不起作用。这是因为员工被添加到办公室的方式。

的JSON解组是这样的员工关联:

office.getEmployees().add(employee) 

这是不够的员工连接到办公室,因为office.getEmployees是关系的非持有端,即休眠不跟踪。

结果是办公室和员工全部插入,但员工到办公室的外键为空。

为了解决这个问题,节省您需要全体员工链接到办公室之前,通过将这种方法办公室和调用它的权利之前坚持:

public void linkEmployees() { 
    for (Employee employee : employees) { 
     employee.setOffice(this); 
    } 
} 

这样的关系的拥有方( Employee.office)正在被设置,所以Hibernate将被通知新的关联并且通过填充从员工到办公室的外键字段来坚持它。

,如果你想了解更多关于Hibernate双向关系的拥有方的ocasional需要我在这里的答案this thread见。

+0

奇怪,我@OneToMany是在不同的地方,我已经更新的问题,以反映这一点。谢谢。 –

+0

更新我在这个线程的答案有关的拥有方,为什么减少了员工与空外键的这种行为是正常的,怎样做是http://stackoverflow.com/questions/2749689/what-is-the-拥有侧功能于一个-ORM映射/ 21068644#21068644 –