Mysql-JPA没有插入到三次表"多对多"中



我的项目中有多对多关系,我可以在我的两个实体表中写入,关系表不会写入任何内容。

EspecificacionEscenario类别:

public class EspecificacionEscenario implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idespecificacionEscenario")
private Integer idespecificacionEscenario;
@Column(name = "codigo")
private String codigo;
@Column(name = "fecha")
@Temporal(TemporalType.TIMESTAMP)
private Date fecha;
@Column(name = "nombreProceso")
private String nombreProceso;
@Column(name = "nombreEscenario")
private String nombreEscenario;
@Column(name = "objetivoEscenario")
private String objetivoEscenario;
@Column(name = "lugarEscenario")
private String lugarEscenario;
@Column(name = "recursoEscenario")
private String recursoEscenario;
@Column(name = "restriccionEscenario")
private String restriccionEscenario;
@Column(name = "actoresEscenario")
private String actoresEscenario;
@ManyToMany(mappedBy = "especificacionEscenarioList", fetch = FetchType.LAZY)
private List<Elicitacion> elicitacionList;
@ManyToMany(mappedBy = "especificacionEscenarioList", fetch = FetchType.LAZY)
private List<Episodio> episodioList;
@ManyToMany(mappedBy = "especificacionEscenarioList", fetch = FetchType.LAZY)
private List<Educcion> educcionList;

Episodio类:

public class Episodio implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idepisodio")
private Integer idepisodio;
@Column(name = "codigo")
private String codigo;
@Column(name = "objetivoEpisodio")
private String objetivoEpisodio;
@Column(name = "descripcionEpisodio")
private String descripcionEpisodio;
@Column(name = "recursosEpisodio")
private String recursosEpisodio;
@Column(name = "restriccionEpisodio")
private String restriccionEpisodio;
@Column(name = "actor")
private String actor;
@JoinTable(name = "especificacionEscenarioEpisodio", joinColumns = {
@JoinColumn(name = "idepisodio", referencedColumnName = "idepisodio")}, inverseJoinColumns = {
@JoinColumn(name = "idespecificacionEscenario", referencedColumnName = "idespecificacionEscenario")})
@ManyToMany(fetch = FetchType.LAZY)
private List<EspecificacionEscenario> especificacionEscenarioList;

主要代码:

public static void main(String[] args) {
EpisodioDao episodioDao = new EpisodioDao();
EspecificacionEscenarioDao escenarioDao = new EspecificacionEscenarioDao();
Episodio episodio = new Episodio();
episodio.setCodigo("e01");
episodio.setDescripcionEpisodio("descripcion episodio");
EspecificacionEscenario ee = new EspecificacionEscenario();
ee.setCodigo("ee-01");
List<Episodio> listaE = new ArrayList<>();
listaE.add(episodio);
ee.setEpisodioList(listaE);
episodioDao.registrarEpisodio(episodio);
System.exit(0);
}

在实体中执行持久化时,信息会自动保存,但在表第三个表中,它不会插入主键。

我在Episodio上添加了CascadeType.ALL,因为它是这个关系的所有者。

以下代码可能会对您有所帮助。我已经用spring数据jpa进行了测试。

@Setter
@Getter
@Entity
public class Episodio implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idepisodio")
private Integer idepisodio;
@Column(name = "codigo")
private String codigo;
@Column(name = "objetivoEpisodio")
private String objetivoEpisodio;
@Column(name = "descripcionEpisodio")
private String descripcionEpisodio;
@Column(name = "recursosEpisodio")
private String recursosEpisodio;
@Column(name = "restriccionEpisodio")
private String restriccionEpisodio;
@Column(name = "actor")
private String actor;
@JoinTable(name = "especificacionEscenarioEpisodio",
joinColumns = {
@JoinColumn(name = "idepisodio", referencedColumnName = "idepisodio")},
inverseJoinColumns = {
@JoinColumn(name = "idespecificacionEscenario", referencedColumnName = "idespecificacionEscenario")})
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<EspecificacionEscenario> especificacionEscenarioList;
}


@Setter
@Getter
@Entity
public class EspecificacionEscenario implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idespecificacionEscenario")
private Integer idespecificacionEscenario;
@Column(name = "codigo")
private String codigo;
@Column(name = "fecha")
@Temporal(TemporalType.TIMESTAMP)
private Date fecha;
@Column(name = "nombreProceso")
private String nombreProceso;
@Column(name = "nombreEscenario")
private String nombreEscenario;
@Column(name = "objetivoEscenario")
private String objetivoEscenario;
@Column(name = "lugarEscenario")
private String lugarEscenario;
@Column(name = "recursoEscenario")
private String recursoEscenario;
@Column(name = "restriccionEscenario")
private String restriccionEscenario;
@Column(name = "actoresEscenario")
private String actoresEscenario;
@ManyToMany(mappedBy = "especificacionEscenarioList", fetch = FetchType.LAZY)
private List<Episodio> episodioList;
}

EspecificacionEscenario especificacionEscenario = new EspecificacionEscenario();
especificacionEscenario.setCodigo("ee-01");
List<EspecificacionEscenario> especificacionEscenarios = new ArrayList<>();
especificacionEscenarios.add(especificacionEscenario);

Episodio episodio = new Episodio();
episodio.setCodigo("e01");
episodio.setDescripcionEpisodio("descripcion episodio");
episodio.setEspecificacionEscenarioList(especificacionEscenarios);
episodioRepo.save(episodio);

最新更新