2017-03-03 10 views
2

私は2つのクラスのStudentとAddressを持っています。私はORMツールとしてhibernateを使用しています。 学生と住所多くの学生が同じaddress.Myアドレスクラスを持つことができます:springテーブルの親テーブルとリンクする子テーブルにjsonデータを挿入する方法

@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 
} 

私の学生のクラスがある:Addressクラスのための

@Entity 
public class Student { 
@Id 
@GeneratedValue 
private int sid; 
private String sname; 
//getter and setter,constructor 
} 

私のコントローラクラスは次のとおりです。

0私はとJSONデータを挿入します。 はlocalhost:8080 /アドレス

{"address":"kathmandu","students":[{"sname":"Pravin"},{"sname":"biplav"}]} 

しかし、私は、既存のaddress.Iが アドレスではなくせずにリンクする新しい学生を挿入すると、学生を追加したいときに問題がありますアドレステーブルに新しい行を挿入する。

アドレスクラスの私のコントローラは、次のとおりです。

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"; 
} 

は私が挿入するよう: はlocalhost:8080 /学生

その後
{"sname":"pravin","aid":"1"} 

答えて

0

あなたは住所に学生を追加するために別のRESTエンドポイントを必要とします。例えば POSTのhttp://localhost:8080/address/1/studentにjsonの学生依頼の本文があります。

あなたが見逃すリンクは、更新するアドレスのIDです。


POST http://localhost:8080/address/1/student

リクエストボディ:あなたは私は今、POSTを使用しています見ることができるように{"sname":"pravin"}

@POST 
@Path("address/{addressId}/student") 
public Response addStudentToAddress(@PathParam("addressId") Integer addressId, Student student)) { 

    // Fetch address by id 
    // Add student to list 
    // Save updated address 

} 

新しい学生を「作成」し、既存のアドレスのエンティティに追加します。

あなたが持っているその他のオプションは、アドレスを更新するためにPUTを使用しています(アドレスオブジェクト全体が要求本体に存在する必要があります)。また、リソースを更新できるPATCHもあります。あなたは)明らかに、このロジックを自分で記述する必要が


PUT http://localhost:8080/address/1

リクエストボディ:{"aid":"1","address":"kathmandu","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 http://localhost:8080/address/1

リクエストボディ:{"aid":"1", "students":[{"sid":"1", "sname":"Pravin"},{"sid":"2", "sname":"biplav"}, {"sname":"Nico"}]}

私はこのフィールドを更新しないように私はここに、このリクエストボディに"address":"katmandu"を渡しません。

@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 

} 
+0

私はそれがローカルホストを指しているとき、アドレスリソースを更新しても意味がありませんit.Pleaseが – pravin

+0

手の込んだ取得didntは:8080 /学生。また、更新するアドレスを知ることができるので、更新したいアドレスIDを渡す必要があります。 –

関連する問題