我的项目中有多对多关系,我可以在我的两个实体表中写东西,关系表没有写任何东西。
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;
情节类:
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);
}
在实体中进行持久化时,信息会自动保存,但是在第三个表中它不会插入主键。
答案 0 :(得分:0)
我在Episodio上添加了CascadeType.ALL,因为它是该关系的所有者。
以下代码可能会对您有所帮助。我已经用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);