2017-07-19 8 views
0

存在しない場合、私は、このような休止状態:CascadeType.ALLがすでに

class A{ 

    @ManyToOne(cascade=CascadeType.ALL) 
    B b; 

    // other stuff 
} 
クラスBでは

class B{ 

    @Id 
    @Column(unique = true, nullable = false) 
    private Integer id; 

    // other stuff 
} 

たびに新しいオブジェクトその二つのクラスAとBを持っているオブジェクトを作成してみてくださいAのオブジェクトが作成されていない場合はオブジェクトBを作成します。しかし、それがすでに存在するなら、私はそれを作成したくありません。この場合、私はちょうど既に既存のBオブジェクトのAテーブルの参照をします。今私がしようとしたとき、私はこの例外を取得するので、

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '10' for key 'PRIMARY' 

これは、標準のタスクを思わ誰かが助けてくださいすることができます私はstackoverflowの上などの任意の解決策を見つけるように見えることはできません。ありがとう!!

編集:私はSring JPAリポジトリを使用して保存します。私は最終的にCrudReposiotyを拡張し、その保存機能を使用するAとBの両方のためのリポジトリインタフェースを持っています。以下は、あなたがデータベースにオブジェクトAを挿入する前に、オブジェクトBのIDを設定する必要がorg.springframework.data.repository.CrudRepository

/** 
* Saves a given entity. Use the returned instance for further operations as the save operation might have changed the 
* entity instance completely. 
* 
* @param entity 
* @return the saved entity 
*/ 
<S extends T> S save(S entity); 
+0

セーブ/アップデートを実行し、excetpionを引き起こすメソッドを追加します –

+0

BのIDを生成された値にすることはできますか? –

+0

@MaciejKowalski IDは提供されますので、生成されることはありません。私はこれがSpring Data JPAともっと関係していると思っていますし、 – varunkr

答えて

2

からの関数です。この場合、Bが存在しなければBがデータベースに挿入されます。

+0

私はidとあなたが言及した事件をうまく設定します。 DBにBが存在すると例外がスローされます – varunkr

+0

例外は何ですか? –