2016-08-13 7 views
2

が、私は一度に両方を保存しようとしているNULL制約は

org.postgresql.util.PSQLException: ERROR: null value in column "tournament_id" violates not-null constraint` 

Tournament.java

@Data 
@Entity 
public class Tournament { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 
    private String name; 

    @OneToMany(mappedBy = "tournament", cascade = CascadeType.PERSIST) 
    private List<Group> groups;} 

グループ

@Entity 
@Data 
@Table(schema = "offan", name = "groups") 
public class Group { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    @ManyToOne 
    @JoinColumn(name = "tournament_id") 
    private Tournament tournament; 

    public Group(){} 
    public Group(Tournament tournament){ 
     this.tournament = tournament; 
    } 
} 

を取得休止状態。 CrudRepositoryとなります。グループを持たないトーナメントのインスタンスを保存するだけでうまくいきます。グループが挿入されない理由がわかりませんtournament_idキーが正しく設定されています

私はゲッターとセッターにロンボクを使用しています。

DDL:

CREATE TABLE tournaments (
    id SERIAL PRIMARY KEY, 
    name VARCHAR(50) NOT NULL 
); 

CREATE TABLE groups (
    id SERIAL PRIMARY KEY, 
    name VARCHAR(50) , 
    tournament_id INTEGER REFERENCES tournaments (id) NOT NULL , 
    UNIQUE (name, tournament_id) 
); 

可能性のある問題

私は春の大会オブジェクトに私のオブジェクトを解析する@RequestBody使用し、これは正しくマッピングを設定していない可能性がありますか?

は...問題の正しいマッピングを設定していない基礎となるジャクソンライブラリを使用してオブジェクトを解析

ました。手動ですべてを正しく挿入しました。

@RequestMapping(value = "/tournaments", method = RequestMethod.POST) 
public Tournament createTournament(@RequestBody Tournament tournament){ 
    //Will not work 
    //Tournament savedEntry = tournamentRepository.save(tournament); 
    // 

    //Setting properties manually works... 
    Tournament t = new Tournament(); 
    t.setName(tournament.getName()); 

    Group group = new Group(); 
    group.setTournament(t); 

    t.getGroups().add(group) 

    // Both tournament and group are inserted 
    t = tournamentRepository.save(t); 

    return t; //Overflow here because of jackson another thing to fix :) 
} 
+0

DDLスクリプトを追加できますか? – Rocherlee

+0

もちろん@Rocherlee! – skyw00lker

+0

あなたの最後の編集は私の答えが意味するものです! :P: –

答えて

0

は、私はあなたが別途Tournamentエンティティを保存する必要があり、その後、対応するGroupエンティティでTournament、その後は別途そのGroupエンティティを保存することを設定しますね。 (春グループのエンティティを保存したり、Tournamentを、対応するマッピングによって、グループエンティティを保存するのいずれかの場合には、insert文の数は同じままです。)

ここで何が起こっている、あなたは呼び出すことでGroupに各Tournamentをマッピングするために春を期待していますさセッターはGroupですが、これは起こっていません。

+0

ええ、私はこのアプローチをJooqでやってきました。このことについて複数のブログのエントリーを見て、オブジェクトグラフ全体を保存するのはいいと思います。私はどのようにhibernate handle batchこの小さなアプリケーションのために、一度重いクエリは今のところ問題にはなりません:) – skyw00lker

関連する問題