如何使用JPA保持多对多的关系

时间:2015-10-26 21:29:09

标签: java jpa

我对如何在数据库中保存数据感到很困惑。我将从表中获取数据然后保存。

我的关系图如下:

如何将Layoutsos列表保存到Ordemservico中?

Relationship here

这是我的班级。

public class Ordemservico implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idordemservico")
    private Integer idordemservico;
    @Column(name = "identificadoros")
    private Integer identificadoros;
    @Column(name = "mes")
    private Integer mes;
    @Column(name = "ano")
    private Integer ano;
    @Column(name = "assunto")
    private String assunto;
    @Basic(optional = false)
    @Column(name = "publicitario")
    private String publicitario;
    @Basic(optional = false)
    @Column(name = "layoutos")
    private String layoutos;
    @Basic(optional = false)
    @Column(name = "dataincio")
    @Temporal(TemporalType.DATE)
    private Date dataincio;
    @Column(name = "datafim")
    @Temporal(TemporalType.DATE)
    private Date datafim;
    @Column(name = "dataevento")
    @Temporal(TemporalType.DATE)
    private Date dataevento;
    @Column(name = "producao")
    private String producao;
    @Lob
    @Column(name = "discricao")
    private String discricao;
    @Column(name = "responsavelos")
    private String responsavelos;
    @Column(name = "materiajornal")
    private String materiajornal;
    @ManyToMany(mappedBy = "ordemservicoList")
    private List<Ordemproducao> ordemproducaoList;
    @ManyToMany(mappedBy = "ordemservicoList")
    private List<Layoutsos> layoutsosList;
    @JoinTable(name = "ordemservico_has_usuario", joinColumns = {
        @JoinColumn(name = "ordemservico_idordemservico", referencedColumnName = ` ` "idordemservico")}, inverseJoinColumns = {
     @JoinColumn(name = "usuario_idusuario", referencedColumnName = ` ` ` ` ` ` ` ` "idusuario")})
    @ManyToMany
    private List<Usuario> usuarioList;
    @JoinColumn(name = "secretaria_idsecretaria", referencedColumnName = ` ` ` ` ` ` "idsecretaria")
    @ManyToOne(optional = false)
    private Secretaria secretariaIdsecretaria;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `"ordemservicoIdordemservico")
    private List<Materiajornal> materiajornalList;

    public Ordemservico() {
    }

    public Ordemservico(Integer idordemservico) {
        this.idordemservico = idordemservico;
    }

    public Ordemservico(Integer idordemservico, String publicitario, String     ` ` layoutos, Date dataincio) {
        this.idordemservico = idordemservico;
        this.publicitario = publicitario;
        this.layoutos = layoutos;
        this.dataincio = dataincio;
    }

    public Integer getIdordemservico() {
        return idordemservico;
    }

    public void setIdordemservico(Integer idordemservico) {
        this.idordemservico = idordemservico;
    }

    public Integer getIdentificadoros() {
        return identificadoros;
    }

    public void setIdentificadoros(Integer identificadoros) {
        this.identificadoros = identificadoros;
    }

    public Integer getMes() {
        return mes;
    }

    public void setMes(Integer mes) {
        this.mes = mes;
    }

    public Integer getAno() {
        return ano;
    }

    public void setAno(Integer ano) {
        this.ano = ano;
    }

    public String getAssunto() {
        return assunto;
    }

    public void setAssunto(String assunto) {
        this.assunto = assunto;
    }

    public String getPublicitario() {
        return publicitario;
    }

    public void setPublicitario(String publicitario) {
        this.publicitario = publicitario;
    }

    public String getLayoutos() {
        return layoutos;
    }

    public void setLayoutos(String layoutos) {
        this.layoutos = layoutos;
    }

    public Date getDataincio() {
        return dataincio;
    }

    public void setDataincio(Date dataincio) {
        this.dataincio = dataincio;
    }

    public Date getDatafim() {
        return datafim;
    }

    public void setDatafim(Date datafim) {
        this.datafim = datafim;
    }

    public Date getDataevento() {
        return dataevento;
    }

    public void setDataevento(Date dataevento) {
        this.dataevento = dataevento;
    }

    public String getProducao() {
        return producao;
    }

    public void setProducao(String producao) {
        this.producao = producao;
    }

    public String getDiscricao() {
        return discricao;
    }

    public void setDiscricao(String discricao) {
        this.discricao = discricao;
    }

    public String getResponsavelos() {
        return responsavelos;
    }

    public void setResponsavelos(String responsavelos) {
        this.responsavelos = responsavelos;
    }

    public String getMateriajornal() {
        return materiajornal;
    }

    public void setMateriajornal(String materiajornal) {
        this.materiajornal = materiajornal;
    }

    @XmlTransient
    public List<Ordemproducao> getOrdemproducaoList() {
        return ordemproducaoList;
    }

    public void setOrdemproducaoList(List<Ordemproducao> ordemproducaoList) {
        this.ordemproducaoList = ordemproducaoList;
    }

    @XmlTransient
    public List<Layoutsos> getLayoutsosList() {
        return layoutsosList;
    }

    public void setLayoutsosList(List<Layoutsos> layoutsosList) {
        this.layoutsosList = layoutsosList;
    }

    @XmlTransient
    public List<Usuario> getUsuarioList() {
        return usuarioList;
    }

    public void setUsuarioList(List<Usuario> usuarioList) {
        this.usuarioList = usuarioList;
    }

    public Secretaria getSecretariaIdsecretaria() {
        return secretariaIdsecretaria;
    }

    public void setSecretariaIdsecretaria(Secretaria secretariaIdsecretaria) {
        this.secretariaIdsecretaria = secretariaIdsecretaria;
    }

    @XmlTransient
    public List<Materiajornal> getMateriajornalList() {
        return materiajornalList;
    }

    public void setMateriajornalList(List<Materiajornal> materiajornalList) {
        this.materiajornalList = materiajornalList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idordemservico != null ? idordemservico.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {

        if (!(object instanceof Ordemservico)) {
            return false;
        }
        Ordemservico other = (Ordemservico) object;
        if ((this.idordemservico == null && other.idordemservico != null) || ` ` ` ` (this.idordemservico != null && ` ` ` ` ` `      `  ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `enter code here`!this.idordemservico.equals(other.idordemservico))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return  assunto ;
    }
}

其他实体的代码

但是如何获取从Jtable中选择并保存的项目列表。该表包含所有布局,现在我想将一些布局保存到ordemserviço

public class Layoutsos implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idlayoutsos")
private Integer idlayoutsos;
@Column(name = "nome")
private String nome;
@Column(name = "medidas")
private String medidas;
@JoinTable(name = "ordemservico_has_layoutsos", joinColumns = {
    @JoinColumn(name = "layoutsos_idlayoutsos", referencedColumnName = "idlayoutsos")}, inverseJoinColumns = {
    @JoinColumn(name = "ordemservico_idordemservico", referencedColumnName = "idordemservico")})
@ManyToMany
private List<Ordemservico> ordemservicoList;

public Layoutsos() {
}

public Layoutsos(Integer idlayoutsos) {
    this.idlayoutsos = idlayoutsos;
}

public Integer getIdlayoutsos() {
    return idlayoutsos;
}

public void setIdlayoutsos(Integer idlayoutsos) {
    this.idlayoutsos = idlayoutsos;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getMedidas() {
    return medidas;
}

public void setMedidas(String medidas) {
    this.medidas = medidas;
}

@XmlTransient
public List<Ordemservico> getOrdemservicoList() {
    return ordemservicoList;
}

public void setOrdemservicoList(List<Ordemservico> ordemservicoList) {
    this.ordemservicoList = ordemservicoList;
}

@Override
public int hashCode() {
    int hash = 0;
    hash += (idlayoutsos != null ? idlayoutsos.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Layoutsos)) {
        return false;
    }
    Layoutsos other = (Layoutsos) object;
    if ((this.idlayoutsos == null && other.idlayoutsos != null) || (this.idlayoutsos != null && !this.idlayoutsos.equals(other.idlayoutsos))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "br.app.com.classes.Layoutsos[ idlayoutsos=" + idlayoutsos + " ]";
}

}

1 个答案:

答案 0 :(得分:0)

假设您有一个layoutsos类型的对象变量Layoutsos,它已持久保存到数据库或从数据库中检索。以下是持久化Ordemservico实体时代码的外观。

Ordemservico o = new Ordemservico();
o.getOrdemproducaoList().add(layoutsos);
em.persist(o);

如果这是双向关系,则应在持久之前设置关系的两侧。

Layoutsos layoutsos = new Layoutsos();
Ordemservico o = new Ordemservico();

o.getOrdemproducaoList().add(layoutsos);
layoutsos.getOrdermserviceoList().add(o);
em.persist(layoutsos);
em.persist(o);