我正在使用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 + " ]";
}
}
有关如何避免此查询的任何想法?