gpt4 book ai didi

java - JPA ManyToMany 在创建时不插入连接表

转载 作者:行者123 更新时间:2023-11-29 02:16:59 26 4
gpt4 key购买 nike

我正在使用 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
}

实体 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

为什么不执行 insert into INTEGRANTE_GRUPO_JAAS!!???

两个代码(创建“NucleoFamiliar”和创建“Usuario”)几乎相同,我的意思是,它们几乎相同。

请帮忙,我花了几天时间观察所有内容,但我还没有找到解决方案(我正在使用 jpa 2.1)

最佳答案

在 Usario 类中,通过使用 @ManyToMany 关联映射中的 mappedBy 属性,您已指定两个关联的所有者。

在下面两个关联映射中

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

通过在关系中使用 mappedBy 属性,您可以有效地指定这些关联的所有者是 GrupoJass 和 NucleoFamiliar。

现在在关系中只有所有者可以更新关系状态。因此,当您保存 NucleoFamiliar 时,它还会更新作为 JoinTable 的关系。

关于java - JPA ManyToMany 在创建时不插入连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38036165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com