2016-06-26 26 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

@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 
} 

當我創建一個新的 「NucleoFamiliar」 與 「integrantes」 的非空列表, jpa按預期執行2個句子:

insert into NUCLEO_FAMILIAR 
insert into INTEGRANTE_NUCLEO_FAMILIAR 

當我創建一個新的「Usuario」與「gruposJaas」的非空列表,JPA執行只有一句話:

insert into USUARIO 

爲什麼不執行插入INTEGRANTE_GRUPO_JAAS !! ???

這兩個代碼(創建「NucleoFamiliar」和創建「Usuario」)幾乎是相同的,我的意思是,他們幾乎是相同的。

請幫幫忙,我花了幾天冷眼旁觀,我還沒有找到一個解決辦法(我使用JPA 2.1)

+0

看來你的映射是正確的。代碼創建和保存實體在哪裏?如果您發佈代碼,可能有助於瞭解它爲什麼不起作用。 – ujulu

回答

2

在Usario類使用您指定的@ManyToMany關聯映射的屬性的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;` 

在你已經有效地指定這些關聯的所有者是GrupoJass和NucleoFamiliar的關係使用的mappedBy屬性。

現在在關係中,所有者只能更新關係狀態。因此,當您保存NucleoFamiliar時,它也會更新JoinTable的關係。

+0

你是絕對的輝煌!非常感謝!!!那就是答案。我必須「更新」gruposJaas.integrantes才能在註冊表中插入註冊表!再次感謝! – Gabriel

+0

@Gabriel您的歡迎..也請接受答案:) – Zulfi