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にこれまでのところ、それらのすべてを拘束されることを請求書を取得するために従わなければならないが、テーブルカスタマー
あなたの春は顧客の全オブジェクトを捉えています。完全に送信したり、マッピングを怠惰に変更したりして、顧客とそのIDだけでオブジェクトを送信する必要はありません。 BtwこれはHibernateマッピングの問題です。 –
ありがとう、私は同じ結果を試みた。マッピングは常にlazyに設定されています。おっと、最後の部分は怠け者だとは思わない。明らかに、上記の例では熱心に設定されています。 – JKK