2016-03-24 12 views
0

Javaアプリケーションで次の例外が発生します。SpringデータjpaリポジトリsaveToがManyToManyで動作しない

org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.DatabaseException 

内部例外:java.sql.SQLIntegrityConstraintViolationException:ORA-00001:一意制約(USER1.ID_TYPE_TENANT_UNIQUE)違反。

私は、2つのテーブル間のManyToManyアソシエーションを使用してデータモデルを設定しました。 2つの間にJoinTableがあり、私はエンティティをこのように設定しました。

public class MyEntity { 
    @Id 
    @SequenceGenerator(name = "MyEntitySeq", sequenceName = "SQ_ENTITY", allocationSize = 1, initialValue = 1) 
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "MyEntitySeq") 
    @Column(name = "ID") 
    private Integer id; 

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    @JoinTable(name = "MY_JOINED_TABLE", 
    joinColumns = { 
      @JoinColumn(name = "e_id", referencedColumnName = "ID")}, 
    inverseJoinColumns = { 
      @JoinColumn(name = "inverse_id", referencedColumnName = "ID")}) 
    private Set<Attributes> attributes; 

} 

私は、エンティティテーブルの3つの他のフィールドと、name、valueの属性テーブルのユニーク制約を持っています。属性のセットを持つエンティティを永続化しようとすると、repository.save()メソッドは両方のために失敗します。 1.属性は属性テーブルに既に存在している可能性があります。しかし、私は依然としてエンティティへのこれらの属性との関連付けを作成したい) 2.エンティティは既に存在する可能性がありますが、ユニーク制約が違反されている可能性があります。 (まだデータベースにない属性を挿入して、このエンティティと属性に関連付ける)。

これらのエンティティ/属性がデータベースにない場合、それは参加するとすべてに、すべての3つのテーブルに罰金と春のインサートを動作します。

ノー団体とテーブル上のrepository.save()を行う場合には、保存()は同じ主キーの私は保存しない場合でも、これらのテーブルを()を更新します。

なぜ私のmanytomanyの場合は機能しませんか?

+0

こんにちはを持っているあなたの永続コンテキスト-XMLでは、私は思っていたということ?私は関連する問題があるかもしれません。 – dasnervtdoch

答えて

0

は(Spring MVCのと休止状態にする私の英語、イムnoobのために申し訳ありません)これを試してみてください、私はsimilars問題を抱えており、この点がimportantsです:あなたは要素あなたに関連付けたい第3のエンティティを取得する必要がある

  1. 最初のエンティティを同じトランザクションに変換します。
  2. 確かにあなたの問題を解決することができた場合は、
関連する問題