2016-03-10 8 views
6

です。これはBootに切り替える前に機能していました。基本的には、@OneToManyリソースにtext/uri-listをPOSTしても問題ありませんでした。私はBootを使用するように私のプロジェクトを切り替えました。 @ManyToOneの最後にtext/uri-listを置くことができますが、それは私がしたいことではありません。スプリングブートデータレストPOSTは204を返しますが、選択肢は

POSTを送信すると、204の応答が表示されますが、コンソールにはSQLが表示されます。選択しても何も挿入しません。 EDIT:私はポストマンを使用していますが、ここでは/同じ

curl -v -X POST -H "Content-Type: text/uri-list" -d "http://localhost:8080/games/2" http://localhost:8080/developers/1/gameList 

そしてIDEAのロガーを返しんcurlコマンドです:ここでは

Hibernate: select developer0_.developer_id as develope1_1_0_, developer0_.name as name2_1_0_ from developer developer0_ where developer0_.developer_id=? 
Hibernate: select game0_.game_id as game_id1_6_0_, game0_.developer_id as develope5_6_0_, game0_.esrb_rating as esrb_rat2_6_0_, game0_.name as name3_6_0_, game0_.release_date as release_4_6_0_, developer1_.developer_id as develope1_1_1_, developer1_.name as name2_1_1_ from game game0_ left outer join developer developer1_ on game0_.developer_id=developer1_.developer_id where game0_.game_id=? 

は私のクラスと関連がある:

@Entity 
public class Developer { 
    @Id 
    @GeneratedValue 
    @Column(name = "developerId") 
    private Long id; 

    private String name; 

    @OneToMany(mappedBy = "developer", cascade = CascadeType.ALL) 
    private List<Game> gameList; 
は、

その他:

@Entity 
public class Game { 
    @Id 
    @GeneratedValue 
    @Column(name = "gameId") 
    private Long id; 

    private String name; 

    private Date releaseDate; 

    private ESRBRating esrbRating; 

    @ManyToMany(mappedBy = "gameList", cascade = CascadeType.ALL) 
    private List<User> userList; 

    @ManyToOne 
    @JoinColumn(name = "developerId") 
    private Developer developer; 

他の関連情報が不明な場合はお知らせください。

+1

挿入するコードを追加できますか? –

+0

あなたの問題はまだ解決しましたか?私はちょうど同じ問題を扱っているだけで、既存の答えは役に立たなかった。 – Smajl

答えて

1

Hibernateは、entitymanagerがフラッシュされるまで、挿入、更新、および削除を収集します。これは、通常、トランザクションの終了時に行われます。 したがって、トランザクション管理が正しく機能しない可能性があります。

org.springframework.transactionのロギングをデバッグに設定します。これは、トランザクションのオープンおよびクローズ時に表示されるはずです。

+0

アプリケーションに 'logging.level.org.springframework.transaction = debug'を追加しました。hibernateの変更、削除、およびテーブルの作成に関する詳細が表示されています。しかし、POSTの出力は同じで、選択するだけです。私が言ったように、もう一方のエンドポイントでのポスティングは正常に動作し、ログに挿入が表示されます。 – jam01

2

あなたは双方向それを維持したい場合には、2つのオプションがあるようです:

  • mappedBy = "developer"を外し、JPAは1対多の関係を管理するためにjointableを使用してみましょうし。

開発者:

@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(
     name="DeveloperGame", 
     joinColumns = @JoinColumn(name="dev_id"), 
     inverseJoinColumns = @JoinColumn(name="game_id") 
) 
private List<Game> gameList; 

ゲーム:

@ManyToOne 
@JoinTable(
     name="DeveloperGame", 
     joinColumns = @JoinColumn(name="game_id"), 
     inverseJoinColumns = @JoinColumn(name="dev_id") 
) 
private Developer developer; 
  • mappedBy = "developer"を削除し、あなたはあなたがjoincolumnがあることを確認してください(jointableを使用したくない場合は@JoinColumnを追加同じ列名の関係の両側

開発者:

@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name = "devId") 
private List<Game> gameList; 

ゲーム:

@ManyToOne 
@JoinColumn(name = "devId") 
private Developer developer; 

これは仕様によるものかどうかは疑問です。この春、データRESTのバグである場合。

+0

これは機能しましたか?私は2つのテーブルを結合している間に同様の問題を抱えているしかし、ここのソリューションは私の実装とまったく同じように見えます。 – Amit

関連する問題