2016-06-26 2 views
2

Ich verwende JPA 2.1, mysql.JPA ManyToMany fügt nicht in die Join-Tabelle ein, wenn create

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

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

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

Wenn ich ein neues "NucleoFamiliar" mit einer nicht-leeren Liste von "integrantes" erstellen, jpa führt 2 Sätze wie erwartet aus:

Wenn ich erstelle eine neue "Usuario" mit einer nicht-leeren Liste von "gruposJaas", JPA führt nur einen Satz:

insert into USUARIO 

Warum ist die Ausführung nicht in INTEGRANTE_GRUPO_JAAS einfügen !! ???

Beide Codes (erstellen "NucleoFamiliar" und erstellen "Usuario") sind fast gleich, ich meine, sie sind fast identisch.

Bitte helfen Sie, ich verbrachte Tage alles beobachten, und ich habe eine Lösung noch (ich verwende JPA 2.1) nicht

+0

Es scheint, dass Ihre Zuordnung korrekt ist. Wo erstellt und speichert der Code Entitäten? Wenn Sie den Code veröffentlichen, kann es hilfreich sein zu sehen, warum es nicht funktioniert. – ujulu

Antwort

2

In Usario Klasse gefunden, indem das mappedBy Attribut in der @ManyToMany Assoziationskartierung unter Verwendung von Ihnen angegebenen Besitzer der beiden Verbände.

Im folgenden zwei Assoziationskartierung

@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;` 

unter Verwendung mappedBy Attribut in der Beziehung, die Sie effektiv festgelegt haben, dass der Eigentümer dieser Vereinigung GrupoJass und NucleoFamiliar ist.

Jetzt in einer Beziehung kann der Besitzer nur den Beziehungsstatus aktualisieren. Daher wird beim Speichern von NucleoFamiliar auch die Beziehung aktualisiert, die JoinTable darstellt.

+0

Sie sind absolut brillant! Danke vielmals!!! Das ist die Antwort. Ich muss gruposJaas.integrantes "updaten", um eine Registry in die Join-Tabelle einzufügen! Danke noch einmal! – Gabriel

+0

@Gabriel dein Willkommen .. bitte auch die Antwort akzeptieren :) – Zulfi

Verwandte Themen