2016-06-26 3 views
2

JPA 2.1、mysqlを使用しています。JPA ManyToManyが作成時に結合テーブルに挿入されない

エンティティUsuario

@Entity 
@Table(name = "USUARIO") 
public class Usuario { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "ID_USUARIO") 
    private Integer id; 

    @Column(name = "NOMBRE", length = 30) 
    private String nombre; 

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "integrantes", cascade = {CascadeType.ALL}) 
    private List<NucleoFamiliar> nucleosFamiliares; 

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "integrantes", cascade = {CascadeType.ALL}) 
    private List<GrupoJaas> gruposJaas; 

    ... getters setters 
} 

エンティティGrupoJaas

@Entity 
@Table(name = "GRUPO_JAAS") 
public class GrupoJaas { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "ID_GRUPO_JAAS") 
    private Integer id; 

    @Column(name = "NOMBRE", length = 30) 
    private String nombre; 

    @ManyToMany(fetch = FetchType.LAZY) 
    @JoinTable(name = "INTEGRANTE_GRUPO_JAAS", joinColumns = { 
     @JoinColumn(name = "ID_GRUPO_JAAS") }, inverseJoinColumns = @JoinColumn(name = "ID_USUARIO")) 
    private List<Usuario> integrantes; 

    ... getters setters 
} 

エンティティNucleoFamiliar

私は "integrantes" の非空のリストを持つ新しい "NucleoFamiliar" を作成

@Entity 
@Table(name = "NUCLEO_FAMILIAR") 
public class NucleoFamiliar { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "ID_NUCLEO_FAMILIAR") 
    private Integer id; 

    @Column(name = "NOMBRE", length = 100) 
    private String nombre; 

    @ManyToMany(fetch = FetchType.LAZY) 
    @JoinTable(name = "INTEGRANTE_NUCLEO_FAMILIAR", joinColumns = { 
     @JoinColumn(name = "ID_NUCLEO_FAMILIAR") }, inverseJoinColumns = @JoinColumn(name = "ID_USUARIO")) 
    private List<Usuario> integrantes; 

    ... getters setters 
} 
、 jpaは期待通りに2つの文を実行します:

insert into NUCLEO_FAMILIAR 
insert into INTEGRANTE_NUCLEO_FAMILIAR 

私は新しい「Usuarioは」「gruposJaas」の非空のリストを作成する10は、JPAは一つだけの文を実行:

insert into USUARIO 

はなぜINTEGRANTE_GRUPO_JAASに挿入実行されていませんの!?

両方のコード(「NucleoFamiliar」を作成し、「Usuario」を作成する)はほぼ同じです。つまり、ほとんど同じです。指定した@ManyToManyの関連マッピングでmappedBy属性を使用してUsarioクラスで

+0

あなたのマッピングは正しいと思われます。エンティティを作成し保存するコードはどこですか?コードを投稿すると、なぜそれが動作していないかを知るのに役立ちます。 – ujulu

答えて

2

(私はJPA 2.1を使用しています)助けてください

は、私はすべてを見て日々を過ごしたと私はまだ解決策を見つけていません2つの団体の所有者。あなたが効果的にこれらの団体の所有者がGrupoJassとNucleoFamiliarであることを指定している関係でmappedBy属性を使用して、下の2つの関連マッピング

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "integrantes", cascade = {CascadeType.ALL}) 
private List<NucleoFamiliar> nucleosFamiliares; 

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "integrantes", cascade = {CascadeType.ALL}) 
private List<GrupoJaas> gruposJaas;` 

これで、所有者は関係のステータスのみを更新することができます。したがって、NucleoFamiliarを保存すると、JoinTableの関係も更新されます。

+0

あなたは絶対に素晴らしいです!どうもありがとう!!!それは答えです。私はgruposJaas.integrantesを "更新"して、レジストリを結合テーブルに挿入しなければなりません!再度、感謝します! – Gabriel

+0

@Gabrielあなたの歓迎..また答えを受け入れてください:) – Zulfi

関連する問題