Java 在SpringMVC和hibernate中如何将json数据插入到与父表链接的子表中

Java 在SpringMVC和hibernate中如何将json数据插入到与父表链接的子表中,java,spring,hibernate,rest,Java,Spring,Hibernate,Rest,我有两个班级,分别是Student和Address。我使用hibernate作为ORM工具。我已经将它们之间的多对一关系映射到了一起 和许多学生一样,学生和地址可以有相同的地址。我的地址类是: @Entity Class Address { @Id @GeneratedValue private int aid; private String address; @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "sid") Lis

我有两个班级,分别是Student和Address。我使用hibernate作为ORM工具。我已经将它们之间的多对一关系映射到了一起 和许多学生一样,学生和地址可以有相同的地址。我的地址类是:

@Entity
Class Address {
@Id
@GeneratedValue
private int aid;
private String address;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "sid")
List<Student> students;
//getter and setter,constructor
}
@Entity
public class Student {
@Id
@GeneratedValue
private int sid;
private String sname;
//getter and setter,constructor
}
public class AddressController {
@RequestMapping(value = "/address",method = RequestMethod.POST)
@ResponseBody
public String insertCategory(@RequestBody Address address) throws        SQLException {
    session=sessionFactory.getCurrentSession();
    session.save(address);
    return "succesful";
}
我的Address类控制器类是:

@Entity
Class Address {
@Id
@GeneratedValue
private int aid;
private String address;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "sid")
List<Student> students;
//getter and setter,constructor
}
@Entity
public class Student {
@Id
@GeneratedValue
private int sid;
private String sname;
//getter and setter,constructor
}
public class AddressController {
@RequestMapping(value = "/address",method = RequestMethod.POST)
@ResponseBody
public String insertCategory(@RequestBody Address address) throws        SQLException {
    session=sessionFactory.getCurrentSession();
    session.save(address);
    return "succesful";
}
我将json数据插入为: 本地主机:8080/地址

{"address":"kathmandu","students":[{"sname":"Pravin"},{"sname":"biplav"}]}
但问题是,当我想添加具有现有地址的学生时,我想插入具有现有地址的新学生链接 地址,但不在地址表中插入新行

我的address类控制器是:

public class StudentController{
@RequestMapping(value = "/student",method = RequestMethod.POST)
@ResponseBody
public String insertCategory(@RequestBody Student student) throws   SQLException {
    session=sessionFactory.getCurrentSession();
    session.save(student);
    return "succesful";
}
我想插入如下内容: 本地主机:8080/学生

{"sname":"pravin","aid":"1"}

然后,您需要另一个REST端点将学生添加到地址。例如 使用json学生请求主体发布

缺少的链接是要更新的地址的id


职位

请求正文:
{“sname”:“pravin”}

正如你所看到的,我现在正在使用一个帖子来“创建”一个新的学生,并将其添加到现有的地址实体中

其他选项包括使用PUT更新地址(整个地址对象必须存在于请求主体中)或补丁,在补丁中,您也可以更新资源,但只能使用您传递的字段(显然,您必须自己编写此逻辑)


请求正文:{code>{aid:“1”,“address:“katmandu”,“students:[{sid:“1”,“sname:“Pravin”},{sid:“2”,“sname:“biplav”},{sname:“Nico”}}

@PUT
@Path("address/{addressId}")
public Response updateAddress(@PathParam("addressId") Integer addressId, Address address)) {

   // match addressId with address body id. throw exception if it does not match
   // Save updated address

}

补丁

请求正文:
{aid:“1”,“students:[{sid:“1”,“sname:“Pravin”},{sid:“2”,“sname:“biplav”},{sname:“Nico”}

@PUT
@Path("address/{addressId}")
public Response updateAddress(@PathParam("addressId") Integer addressId, Address address)) {

   // match addressId with address body id. throw exception if it does not match
   // Save updated address

}
我不想在此请求正文中传递
“地址”:“加德满都”
,因为我不想更新此字段

@PATCH
@Path("address/{addressId}")
public Response updateAddress(@PathParam("addressId") Integer addressId, Address address)) {

   // match addressId with address body id. throw exception if it does not match
   // merge updated fields
   // Save updated address

}

我不明白。请详细说明当指向localhost:8080/student时,更新地址资源是没有意义的。此外,您必须传递要更新的地址id,否则您如何知道应该更新哪个地址?