【发布时间】:2016-06-26 07:27:34
【问题描述】:
我正在使用 JPA 2.1,mysql。
实体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
}
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
}
当我创建一个具有非空“integrantes”列表的新“NucleoFamiliar”时,jpa 会按预期执行 2 个句子:
insert into NUCLEO_FAMILIAR
insert into INTEGRANTE_NUCLEO_FAMILIAR
当我用非空的“gruposJaas”列表创建一个新的“Usuario”时,jpa 只执行一句话:
insert into USUARIO
为什么不执行插入到 INTEGRANTE_GRUPO_JAAS!!???
两个代码(创建“NucleoFamiliar”和创建“Usuario”)几乎相同,我的意思是,它们几乎相同。
请帮忙,我花了几天时间观察一切,但我还没有找到解决方案(我使用的是 jpa 2.1)
【问题讨论】:
-
看来你的映射是正确的。创建和保存实体的代码在哪里?如果您发布代码,它可能有助于了解它为什么不起作用。