集合也加载了OneToMany上的延迟加载映射

时间:2016-05-31 16:11:40

标签: spring-data-jpa querydsl

我正在使用spring-data-jpa和querydsl, 主要对象是Analisi:

public class Analisi implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_ANALISI", nullable = false)
    private Integer idAnalisi;
    @Basic(optional = false)
    @NotNull
    @Column(nullable = false)
    private short tracciato;
    @Size(max = 30)
    @Column(length = 30)
    private String campione;
    @Size(max = 40)
    @Column(length = 40)
    private String reparto;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "TOTALE_PROTEINE", precision = 12)
    private Float totaleProteine;
    @Column(name = "RAPP_AG", precision = 12)
    private Float rappAg;
    @Column(name = "DATA_MODIFICA")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataModifica;
    @Column(name = "DATA_VALIDAZIONE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataValidazione;
    @Column(name = "DATA_CANCELLAZIONE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataCancellazione;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idAnalisi")
    private Collection<AnalisiNefelometrico> analisiNefelometricoCollection;
    @OneToMany(mappedBy = "idAnalisiLink")
    private Collection<Analisi> analisiCollection;
    @JoinColumn(name = "ID_ANALISI_LINK", referencedColumnName = "ID_ANALISI")
    @ManyToOne
    private Analisi idAnalisiLink;
    @JoinColumn(name = "ID_ANALISI_DATI", referencedColumnName = "ID_ANALISI_DATI")
    @ManyToOne
    private AnalisiDati idAnalisiDati;
    @JoinColumn(name = "ID_ANALISI_IFE", referencedColumnName = "ID_ANALISI_IFE")
    @ManyToOne
    private AnalisiIfe idAnalisiIfe;
    @JoinColumn(name = "ID_ANALISI_NOTA", referencedColumnName = "ID_ANALISI_NOTA")
    @ManyToOne
    private AnalisiNota idAnalisiNota;
    @JoinColumn(name = "ID_PATOLOGICO", referencedColumnName = "ID_PATOLOGICO")
    @ManyToOne
    private Patologico idPatologico;
    @JoinColumn(name = "ID_PAZIENTE", referencedColumnName = "ID_PAZIENTE", nullable = false)
    @ManyToOne(optional = false)
    private Paziente idPaziente;
    @JoinColumn(name = "ID_SESSIONE", referencedColumnName = "ID_SESSIONE", nullable = false)
    @ManyToOne(optional = false)
    private Sessione idSessione;
    @JoinColumn(name = "ID_TIPO_VALIDAZIONE", referencedColumnName = "ID_TIPO_VALIDAZIONE", nullable = false)
    @ManyToOne(optional = false)
    private TipoValidazione idTipoValidazione;
    @JoinColumn(name = "ID_UTENTE_CANCELLAZIONE", referencedColumnName = "ID_UTENTE")
    @ManyToOne(fetch=FetchType.LAZY)
    private Utente idUtenteCancellazione;
    @JoinColumn(name = "ID_UTENTE_MODIFICA", referencedColumnName = "ID_UTENTE")
    @ManyToOne(fetch=FetchType.LAZY)
    private Utente idUtenteModifica;
    @JoinColumn(name = "ID_UTENTE_VALIDAZIONE", referencedColumnName = "ID_UTENTE")
    @ManyToOne(fetch=FetchType.LAZY)
    private Utente idUtenteValidazione;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idAnalisi", fetch=FetchType.LAZY)
    private Collection<AnalisiFrazione> analisiFrazioneCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idAnalisi", fetch=FetchType.LAZY)
    private Collection<AnalisiAntisiero> analisiAntisieroCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idAnalisi", fetch=FetchType.LAZY)
    private Collection<AnalisiSmc> analisiSmcCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idAnalisi", fetch=FetchType.LAZY)
    private Collection<AnalisiCampoFree> analisiCampoFreeCollection;

    public Analisi() {
    }

    public Analisi(Integer idAnalisi) {
        this.idAnalisi = idAnalisi;
    }

    public Analisi(Integer idAnalisi, short tracciato) {
        this.idAnalisi = idAnalisi;
        this.tracciato = tracciato;
    }

    public Integer getIdAnalisi() {
        return idAnalisi;
    }

    public void setIdAnalisi(Integer idAnalisi) {
        this.idAnalisi = idAnalisi;
    }

    public short getTracciato() {
        return tracciato;
    }

    public void setTracciato(short tracciato) {
        this.tracciato = tracciato;
    }

    public String getCampione() {
        return campione;
    }

    public void setCampione(String campione) {
        this.campione = campione;
    }

    public String getReparto() {
        return reparto;
    }

    public void setReparto(String reparto) {
        this.reparto = reparto;
    }

    public Float getTotaleProteine() {
        return totaleProteine;
    }

    public void setTotaleProteine(Float totaleProteine) {
        this.totaleProteine = totaleProteine;
    }

    public Float getRappAg() {
        return rappAg;
    }

    public void setRappAg(Float rappAg) {
        this.rappAg = rappAg;
    }

    public Date getDataModifica() {
        return dataModifica;
    }

    public void setDataModifica(Date dataModifica) {
        this.dataModifica = dataModifica;
    }

    public Date getDataValidazione() {
        return dataValidazione;
    }

    public void setDataValidazione(Date dataValidazione) {
        this.dataValidazione = dataValidazione;
    }

    public Date getDataCancellazione() {
        return dataCancellazione;
    }

    public void setDataCancellazione(Date dataCancellazione) {
        this.dataCancellazione = dataCancellazione;
    }

    public Collection<AnalisiNefelometrico> getAnalisiNefelometricoCollection() {
        return analisiNefelometricoCollection;
    }

    public void setAnalisiNefelometricoCollection(Collection<AnalisiNefelometrico> analisiNefelometricoCollection) {
        this.analisiNefelometricoCollection = analisiNefelometricoCollection;
    }

    public Collection<Analisi> getAnalisiCollection() {
        return analisiCollection;
    }

    public void setAnalisiCollection(Collection<Analisi> analisiCollection) {
        this.analisiCollection = analisiCollection;
    }

    public Analisi getIdAnalisiLink() {
        return idAnalisiLink;
    }

    public void setIdAnalisiLink(Analisi idAnalisiLink) {
        this.idAnalisiLink = idAnalisiLink;
    }

    public AnalisiDati getIdAnalisiDati() {
        return idAnalisiDati;
    }

    public void setIdAnalisiDati(AnalisiDati idAnalisiDati) {
        this.idAnalisiDati = idAnalisiDati;
    }

    public AnalisiIfe getIdAnalisiIfe() {
        return idAnalisiIfe;
    }

    public void setIdAnalisiIfe(AnalisiIfe idAnalisiIfe) {
        this.idAnalisiIfe = idAnalisiIfe;
    }

    public AnalisiNota getIdAnalisiNota() {
        return idAnalisiNota;
    }

    public void setIdAnalisiNota(AnalisiNota idAnalisiNota) {
        this.idAnalisiNota = idAnalisiNota;
    }

    public Patologico getIdPatologico() {
        return idPatologico;
    }

    public void setIdPatologico(Patologico idPatologico) {
        this.idPatologico = idPatologico;
    }

    public Paziente getIdPaziente() {
        return idPaziente;
    }

    public void setIdPaziente(Paziente idPaziente) {
        this.idPaziente = idPaziente;
    }

    public Sessione getIdSessione() {
        return idSessione;
    }

    public void setIdSessione(Sessione idSessione) {
        this.idSessione = idSessione;
    }

    public TipoValidazione getIdTipoValidazione() {
        return idTipoValidazione;
    }

    public void setIdTipoValidazione(TipoValidazione idTipoValidazione) {
        this.idTipoValidazione = idTipoValidazione;
    }

    public Utente getIdUtenteCancellazione() {
        return idUtenteCancellazione;
    }

    public void setIdUtenteCancellazione(Utente idUtenteCancellazione) {
        this.idUtenteCancellazione = idUtenteCancellazione;
    }

    public Utente getIdUtenteModifica() {
        return idUtenteModifica;
    }

    public void setIdUtenteModifica(Utente idUtenteModifica) {
        this.idUtenteModifica = idUtenteModifica;
    }

    public Utente getIdUtenteValidazione() {
        return idUtenteValidazione;
    }

    public void setIdUtenteValidazione(Utente idUtenteValidazione) {
        this.idUtenteValidazione = idUtenteValidazione;
    }

    public Collection<AnalisiFrazione> getAnalisiFrazioneCollection() {
        return analisiFrazioneCollection;
    }

    public void setAnalisiFrazioneCollection(Collection<AnalisiFrazione> analisiFrazioneCollection) {
        this.analisiFrazioneCollection = analisiFrazioneCollection;
    }

    public Collection<AnalisiAntisiero> getAnalisiAntisieroCollection() {
        return analisiAntisieroCollection;
    }

    public void setAnalisiAntisieroCollection(Collection<AnalisiAntisiero> analisiAntisieroCollection) {
        this.analisiAntisieroCollection = analisiAntisieroCollection;
    }

    public Collection<AnalisiSmc> getAnalisiSmcCollection() {
        return analisiSmcCollection;
    }

    public void setAnalisiSmcCollection(Collection<AnalisiSmc> analisiSmcCollection) {
        this.analisiSmcCollection = analisiSmcCollection;
    }

    public Collection<AnalisiCampoFree> getAnalisiCampoFreeCollection() {
        return analisiCampoFreeCollection;
    }

    public void setAnalisiCampoFreeCollection(Collection<AnalisiCampoFree> analisiCampoFreeCollection) {
        this.analisiCampoFreeCollection = analisiCampoFreeCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idAnalisi != null ? idAnalisi.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 Analisi)) {
            return false;
        }
        Analisi other = (Analisi) object;
        if ((this.idAnalisi == null && other.idAnalisi != null) || (this.idAnalisi != null && !this.idAnalisi.equals(other.idAnalisi))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.interlabsrl.elfolab.persistence.multiple.model.elettroforesi.Analisi[ idAnalisi=" + idAnalisi + " ]";
    }

}

当我保存任何相关对象时,我已经重新加载了analisi, 以及以下提取我不需要的100万行的查询:

SELECT sesso0_.ID_SESSO AS ID_SESSO1_11_1_,
       sesso0_.descrizione AS descrizi2_11_1_,
       sesso0_.sesso AS sesso3_11_1_,
       pazienteco1_.ID_SESSO AS ID_SESSO8_11_3_,
       pazienteco1_.ID_PAZIENTE AS ID_PAZIE1_9_3_,
       pazienteco1_.ID_PAZIENTE AS ID_PAZIE1_9_0_,
       pazienteco1_.CODICE_FISCALE AS CODICE_F2_9_0_,
       pazienteco1_.cognome AS cognome3_9_0_,
       pazienteco1_.DATA_NASCITA AS DATA_NAS4_9_0_,
       pazienteco1_.ID_PAZIENTE_LAB AS ID_PAZIE5_9_0_,
       pazienteco1_.ID_SESSO AS ID_SESSO8_9_0_,
       pazienteco1_.ID_SPECIE AS ID_SPECI9_9_0_,
       pazienteco1_.nome AS nome6_9_0_,
       pazienteco1_.recapito AS recapito7_9_0_
FROM Sesso sesso0_
  LEFT OUTER JOIN Paziente pazienteco1_ ON sesso0_.ID_SESSO = pazienteco1_.ID_SESSO
WHERE sesso0_.ID_SESSO = ?

这是对象Sesso的映射:

public class Sesso implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_SESSO", nullable = false)
    private Short idSesso;
    @Basic(optional = false)
    @NotNull
    @Column(nullable = false)
    private Character sesso;
    @Size(max = 45)
    @Column(length = 45)
    private String descrizione;
    @OneToMany(mappedBy = "idSesso", fetch=FetchType.LAZY)
    private Collection<Utente> utenteCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idSesso", fetch=FetchType.LAZY)
    private Collection<Paziente> pazienteCollection;

    public Sesso() {
    }

    public Sesso(Short idSesso) {
        this.idSesso = idSesso;
    }

    public Sesso(Short idSesso, Character sesso) {
        this.idSesso = idSesso;
        this.sesso = sesso;
    }

    public Short getIdSesso() {
        return idSesso;
    }

    public void setIdSesso(Short idSesso) {
        this.idSesso = idSesso;
    }

    public Character getSesso() {
        return sesso;
    }

    public void setSesso(Character sesso) {
        this.sesso = sesso;
    }

    public String getDescrizione() {
        return descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }

    public Collection<Utente> getUtenteCollection() {
        return utenteCollection;
    }

    public void setUtenteCollection(Collection<Utente> utenteCollection) {
        this.utenteCollection = utenteCollection;
    }

    public Collection<Paziente> getPazienteCollection() {
        return pazienteCollection;
    }

    public void setPazienteCollection(Collection<Paziente> pazienteCollection) {
        this.pazienteCollection = pazienteCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idSesso != null ? idSesso.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 Sesso)) {
            return false;
        }
        Sesso other = (Sesso) object;
        if ((this.idSesso == null && other.idSesso != null) || (this.idSesso != null && !this.idSesso.equals(other.idSesso))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.interlabsrl.elfolab.persistence.multiple.model.elettroforesi.Sesso[ idSesso=" + idSesso + " ]";
    }

}

这是对象Paziente的映射:

public class Paziente implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_PAZIENTE", nullable = false)
    private Integer idPaziente;
    @Size(max = 20)
    @Column(name = "ID_PAZIENTE_LAB", length = 20)
    private String idPazienteLab;
    @Size(max = 40)
    private String nome;
    @Size(max = 40)
    private String cognome;
    @Column(name = "DATA_NASCITA")
    @Temporal(TemporalType.DATE)
    private Date dataNascita;
    @Size(max = 50)
    private String recapito;
    @Size(max = 30)
    @Column(name = "CODICE_FISCALE", length = 30)
    private String codiceFiscale;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idPaziente")
    private Collection<Analisi> analisiCollection;
    @JoinColumn(name = "ID_SESSO", referencedColumnName = "ID_SESSO" , nullable = false)
    @ManyToOne(optional=false)
    private Sesso idSesso;
    @JoinColumn(name = "ID_SPECIE", referencedColumnName = "ID_SPECIE" , nullable = false)
    @ManyToOne(optional=false)
    private Specie idSpecie;

    public Paziente() {
    }

    public Paziente(Integer idPaziente) {
        this.idPaziente = idPaziente;
    }

    public Integer getIdPaziente() {
        return idPaziente;
    }

    public void setIdPaziente(Integer idPaziente) {
        this.idPaziente = idPaziente;
    }

    public String getIdPazienteLab() {
        return idPazienteLab;
    }

    public void setIdPazienteLab(String idPazienteLab) {
        this.idPazienteLab = idPazienteLab;
    }

    public String getNome() {
        return nome;
    }

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

    public String getCognome() {
        return cognome;
    }

    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    public Date getDataNascita() {
        return dataNascita;
    }

    public void setDataNascita(Date dataNascita) {
        this.dataNascita = dataNascita;
    }

    public String getRecapito() {
        return recapito;
    }

    public void setRecapito(String recapito) {
        this.recapito = recapito;
    }

    public String getCodiceFiscale() {
        return codiceFiscale;
    }

    public void setCodiceFiscale(String codiceFiscale) {
        this.codiceFiscale = codiceFiscale;
    }

    public Collection<Analisi> getAnalisiCollection() {
        return analisiCollection;
    }

    public void setAnalisiCollection(Collection<Analisi> analisiCollection) {
        this.analisiCollection = analisiCollection;
    }

    public Sesso getIdSesso() {
        return idSesso;
    }

    public void setIdSesso(Sesso idSesso) {
        this.idSesso = idSesso;
    }

    public Specie getIdSpecie() {
        return idSpecie;
    }

    public void setIdSpecie(Specie idSpecie) {
        this.idSpecie = idSpecie;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idPaziente != null ? idPaziente.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 Paziente)) {
            return false;
        }
        Paziente other = (Paziente) object;
        if ((this.idPaziente == null && other.idPaziente != null) || (this.idPaziente != null && !this.idPaziente.equals(other.idPaziente))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.interlabsrl.elfolab.persistence.multiple.model.elettroforesi.Paziente[ idPaziente=" + idPaziente + " ]";
    }

}

和对象Utente:

public class Utente implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_UTENTE")
    private Short idUtente;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    private String username;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    private String password;
    @Size(max = 40)
    private String nome;
    @Size(max = 40)
    private String cognome;
    @Column(name = "DATA_NASCITA")
    @Temporal(TemporalType.DATE)
    private Date dataNascita;
    @Column(name = "DATA_CANCELLAZIONE")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataCancellazione;
    @JoinColumn(name = "ID_LABORATORIO", referencedColumnName = "ID_LABORATORIO")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Laboratorio idLaboratorio;
    @JoinColumn(name = "ID_LIVELLO", referencedColumnName = "ID_LIVELLO")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Livello idLivello;
    @JoinColumn(name = "ID_SESSO", referencedColumnName = "ID_SESSO")
    @ManyToOne
    private Sesso idSesso;
    @OneToMany(mappedBy = "idUtenteCancellazione" , fetch = FetchType.LAZY)
    private Collection<Analisi> analisiCollection;
    @OneToMany(mappedBy = "idUtenteModifica" , fetch = FetchType.LAZY)
    private Collection<Analisi> analisiCollection1;
    @OneToMany(mappedBy = "idUtenteValidazione" , fetch = FetchType.LAZY)
    private Collection<Analisi> analisiCollection2;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idUtenteInserimento", fetch = FetchType.LAZY)
    private Collection<Sessione> sessioneCollection;

    public Utente() {
    }

    public Utente(Short idUtente) {
        this.idUtente = idUtente;
    }

    public Utente(Short idUtente, String username, String password) {
        this.idUtente = idUtente;
        this.username = username;
        this.password = password;
    }

    public Short getIdUtente() {
        return idUtente;
    }

    public void setIdUtente(Short idUtente) {
        this.idUtente = idUtente;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNome() {
        return nome;
    }

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

    public String getCognome() {
        return cognome;
    }

    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    public Date getDataNascita() {
        return dataNascita;
    }

    public void setDataNascita(Date dataNascita) {
        this.dataNascita = dataNascita;
    }

    public Date getDataCancellazione() {
        return dataCancellazione;
    }

    public void setDataCancellazione(Date dataCancellazione) {
        this.dataCancellazione = dataCancellazione;
    }

    public Laboratorio getIdLaboratorio() {
        return idLaboratorio;
    }

    public void setIdLaboratorio(Laboratorio idLaboratorio) {
        this.idLaboratorio = idLaboratorio;
    }

    public Livello getIdLivello() {
        return idLivello;
    }

    public void setIdLivello(Livello idLivello) {
        this.idLivello = idLivello;
    }

    public Sesso getIdSesso() {
        return idSesso;
    }

    public void setIdSesso(Sesso idSesso) {
        this.idSesso = idSesso;
    }

    public Collection<Analisi> getAnalisiCollection() {
        return analisiCollection;
    }

    public void setAnalisiCollection(Collection<Analisi> analisiCollection) {
        this.analisiCollection = analisiCollection;
    }

    public Collection<Analisi> getAnalisiCollection1() {
        return analisiCollection1;
    }

    public void setAnalisiCollection1(Collection<Analisi> analisiCollection1) {
        this.analisiCollection1 = analisiCollection1;
    }

    public Collection<Analisi> getAnalisiCollection2() {
        return analisiCollection2;
    }

    public void setAnalisiCollection2(Collection<Analisi> analisiCollection2) {
        this.analisiCollection2 = analisiCollection2;
    }

    public Collection<Sessione> getSessioneCollection() {
        return sessioneCollection;
    }

    public void setSessioneCollection(Collection<Sessione> sessioneCollection) {
        this.sessioneCollection = sessioneCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idUtente != null ? idUtente.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 Utente)) {
            return false;
        }
        Utente other = (Utente) object;
        if ((this.idUtente == null && other.idUtente != null) || (this.idUtente != null && !this.idUtente.equals(other.idUtente))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.interlabsrl.elfolab.persistence.multiple.model.elettroforesi.Utente[ idUtente=" + idUtente + " ]";
    }

}

有关如何避免此查询的任何想法?

0 个答案:

没有答案