2016-08-05 13 views
-1

ManyToManyの関係を使用してオブジェクトを永続化するとエラーが発生しますが、この問題について多くの検索をしましたが、解決策が見つからない場合は、ここに私のコードは次のとおりです。JPA ManyToManyのエラー

Utilisateurエンティティ

public class Utilisateur implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(nullable = false) 
    private Integer id; 
    @Column(length = 2147483647) 
    private String nom; 
    private Integer theme; 
    @JoinTable(name = "utilisateur_prvilege", schema = "sch_admin", joinColumns = { 
     @JoinColumn(name = "privilege", referencedColumnName = "id")}, inverseJoinColumns = { 
     @JoinColumn(name = "utilisateur", referencedColumnName = "id")}) 
    @ManyToMany(cascade = CascadeType.ALL) 
    private List<Privilege> privilegeList = new ArrayList<>(); 

..getters and setter.. 

} 

特権エンティティ

public class Privilege implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column 
    private Integer id; 
    private Integer pane; 
    @Column(length = 2147483647) 
    private String description; 
    @ManyToMany(mappedBy = "privilegeList") 
    private List<Utilisateur> utilisateurList = new ArrayList<>(); 
..getters and setter.. 

} 

cascadettypeプロパティを追加し、永続化するために価値を与える

@ManyToMany(mappedBy = "privilegeList") 
private List<Utilisateur> utilisateurList = new ArrayList<>(); 

で新しいUtilisateur

public void create(Utilisateur utilisateur) { 
    EntityManager em = null; 
    try { 
     em = getEntityManager(); 
     em.getTransaction().begin(); 
     em.persist(utilisateur); 
     em.getTransaction().commit(); 
    } finally { 
     if (em != null) { 
      em.close(); 
     } 
    } 
} 

答えて

1

ManyToManyアノテーションに小さな変更を加える必要があります。 UtilisateurでManyToManyマッピングを定義していますが、結合列(逆マッピングではない)はutilisateurではなくprivilegeです。これらの変更を行うと、今すぐ動作するはずです。

public class Utilisateur implements Serializable { 
private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(nullable = false) 
private Integer id; 
@Column(length = 2147483647) 
private String nom; 
private Integer theme; 
@JoinTable(name = "utilisateur_prvilege", schema = "sch_admin", joinColumns = { 
    @JoinColumn(name = "utilisateur", referencedColumnName = "id")}, inverseJoinColumns = { 
    @JoinColumn(name = "privilege", referencedColumnName = "id")}) 
@ManyToMany(cascade = CascadeType.ALL) 
private List<Privilege> privilegeList = new ArrayList<>(); 

..getters and setter.. 

} 

コミットと多くのマッピングTutorial link

多くをチェックする前にem.flush();行を追加します。

+0

ありがとうございます@プリムクマール、今の値は**特権**テーブルassossiation ** utilisateur_prvilege **ではなく、 ** id utilisateurとid特権**をassossiationテーブルに追加してください、これは私のオブジェクトですか? –

+0

あなたはutilisateur_prvilegeに人口がまったく入らないことを意味しますか?個々のエンティティは永続化しています。 show sqlを有効にして生成されたSQL文を確認できます –

+0

はい、utilisateur_prvilegeは空であり、特権の値は重複しています。 –

1

を作成します。

+0

'@ManyToMany(mappedBy =" privilegeList "、cascade = CascadeType.ALL)'私はまだ同じエラーが出ますが、エラーのIDはインクリメントされます。 'キー(utilisateur)=(2)は存在しませんテーブル "utilisateur" '、私は前にそれを行うと私は本当に何が起こっているのか理解していない、何を意味した**持続する価値を与える** @Chetan Verma私はそれを理解していない? –

+0

私はset cascade = CascadeType.Persistを意味します。 –

+0

私はまだ同じエラーを受け取ります@Chetan Verma –

関連する問題