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