MySQL-JPA没有插入到多表中

时间:2018-10-29 02:38:39

标签: java 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;

情节类:

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);

}

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

1 个答案:

答案 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);