2017-03-25 30 views
0

以下のように@ManyToOne関係を持つ2つのエンティティクラスがあります。CrudRepositoryを使用して外部キーを持つエンティティオブジェクトを保存します。

@Entity 
public class Student { 

    @Id 
    private Integer studentId; 

    @Column(nullable = false) 
    private String studentName; 

    @ManyToOne(targetEntity = School.class, fetch = FetchType.LAZY, optional = false) 
    @JoinColumn(referencedColumnName = "schoolId", insertable = false, updatable = false) 
    private School school; 

    //Getters and Setters methods 

。私は、JSONペイロードでCrudRepositoryデフォルトの方法studentRepository.save(student)を使用して生徒のオブジェクトを保存しようとすると

@Entity 
public class School { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer schoolId; 

    @Column(nullable = false) 
    private String schoolName; 

    //Getters and Setters methods 

、それは私にエラーjava.sql.SQLException: Field 'school_id' doesn't have a default valueを与えます。デバッグモードで実行すると、スクールオブジェクトが正しく設定されていることがわかります。次のように

私のJSONペイロードは次のとおりです。

[ 
    { 
     "studentId": "2015020", 
     "studentName": "ABC", 
     "school": { 
     "schoolId": 1 
     } 
    } 
] 

私は春データJPAに新しいですので、これは非常に基本的な間違いかもしれません。

答えて

0

あなたは、テーブルschoolshcoolIdに列名collegeIdを変更しようとし、この行変更する可能性:エンティティで

@ManyToOne(targetEntity = School.class, fetch = FetchType.LAZY, optional = false) 
@JoinColumn(referencedColumnName = "schoolId", insertable = false, updatable = false) 
private School school; 
+0

それを指摘していただきありがとうございます。それはタイプミスで、私はそれを修正しました。 – anirus

0

Studentプロパティschoolは、オブジェクトです。新しい生徒を挿入するには、schoolオブジェクトへの参照を使用する必要があります。だからあなたのペイロードは、このようにする必要があります

{ 
    "studentId": 2015020, 
    "studentName": "ABC", 
    "school": "http://localhost:8080/api/schools/1" 
} 

また、あなたは、プロパティschoolの定義を簡略化することができます。

@ManyToOne(optional = false) 
private School school; 
0

だけであれば、エンティティマッピングとデータベース列の一致の名前をチェック:ID列場合 をDBの学校のテーブルの "school_id"は、あなたのマッピングでそれを言及:

@Id 
    @Column(name = "school_id") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer schoolId; 
関連する問題