2017-01-07 5 views
1

all。SpringBoot REST - HTTP POST JSONデータを使用して外部キーで行を挿入

私は簡単な問題を理解するのに問題があります。 Spring Bootアプリケーションには2つのエンティティがあります。 Web RESTfulインターフェースを備えています。私は挿入することができますし、他のテーブルとは関係ない独立した行を選択しますが、私は正しく外部キーを持つ行を挿入することはできません。行は挿入されますが、親テーブルにリンクするIDはありません。

親テーブルのお客様:

@Entity 
@Table(name = "CUSTOMER") 
public class Customer { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private long id; 
private String firstname; 
private String mi; 
private String lastname; 

...} 

子テーブルの請求書: { "dropoff":"2017-01-30 10:33", "ready":"", "paid":"false", "note":"manual insert", "customer_id":"1" }

@Entity 
@Table(name = "INVOICE") 
public class Invoice { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private long id; 

private Date dropoff; 
private Date ready; 
private String note; 
private Boolean paid; 
private BigDecimal total_price; 
private long total_quantity; 

@ManyToOne(fetch=FetchType.EAGER) 
@JoinColumn(name="CUSTOMER_ID") 
private Customer customer; 

...} 

ここで私はhttp://localhost:8080/invoices

POSTテスト1に送信しようとしたPOSTテストがあります

POSTテスト2: { "dropoff":"2017-01-30 10:33", "ready":"", "paid":"false", "note":"manual insert", "customer":{ "id":"1" } }

POSTテスト3: { "dropoff":"2017-01-30 10:33", "ready":"", "paid":"false", "note":"manual insert", "customerid":"1" }

POST試験4: 私はデータを参照テーブル請求書上の選択を実行するが、それは1の顧客IDに関連付けられていない{ "dropoff":"2017-01-30 10:33", "ready":"", "paid":"false", "note":"manual insert", "customerId":"1" }

興味深い結果:上記のPOSTの例2を試してみると、請求書にid = 1の請求書レコードが更新されます。t内のオブジェクトの顧客を無視するように見える彼はパッケージを投稿する。私は、インサート1の顧客IDにこれまでのところ、それらのすべてを拘束されることを請求書を取得するために従わなければならないが、テーブルカスタマー

+0

あなたの春は顧客の全オブジェクトを捉えています。完全に送信したり、マッピングを怠惰に変更したりして、顧客とそのIDだけでオブジェクトを送信する必要はありません。 BtwこれはHibernateマッピングの問題です。 –

+0

ありがとう、私は同じ結果を試みた。マッピングは常にlazyに設定されています。おっと、最後の部分は怠け者だとは思わない。明らかに、上記の例では熱心に設定されています。 – JKK

答えて

0

への外部キーなしであなたにURLを配置する必要がありますどのような形式

わかりません以下のようなオブジェクト:あなたのケースで

"account" : "http://example.com/accounts/9999" 

は、あなたが「顧客」

1
POST Test 2: { 
     "dropoff":"2017-01-30 10:33", 
     "ready":"", 
     "paid":"false", 
     "note":"manual insert", 
     "customer":{ 
      "id":"1" 
     } 
    } 

テスト2が完璧であるとの「アカウント」を置き換えると思いますが、あなたは顧客のIDを送信しない場合、それはなりますあなたが使用しているために自動生成する@GeneratedValue(strategy = GenerationType.AUTO)

InvoiceRepository.javaを作成して、以下のコードのような顧客IDを持つ請求書を取得する必要があります。

@Repository 
public interface InvoiceRepository extends JpaRepository<Invoice, Serializable>{ 
    Invoice findByCustomerId(long id); 
} 

これにより、特定の顧客IDの請求書が返送されます。

関連する問題