У меня есть отношение «один ко многим» между объектами Visite
и Datevisite
.Получение дублированных строк при сохранении дочернего объекта
Я получаю дубликат строки в базе данных, когда я сохраняю новый ребенок. Это означает, что когда я сохраняю новый Datevisite
, я нахожу дублирующую строку в базе данных, но с идентификатором differet.
Может кто-нибудь сказать мне, что за ошибка?
вот мой Visite
сущность
package model.entitie;
import java.io.Serializable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
@Entity
@NamedQueries({ @NamedQuery(name = "Visite.findAll", query = "select o from Visite o") })
@SequenceGenerator(name = "Visite_Id_Seq_Gen", sequenceName = "VISITE_SEQ", allocationSize = 1, initialValue = 50)
public class Visite implements Serializable {
private static final long serialVersionUID = 2402539910369717472L;
@Column(length = 4000)
public String client;
@Column(name = "INGAFF", length = 4000)
private String ingAff;
@Column (name="MOISVISITE",length = 4000)
private int moisviste;
@Column(name = "PRBVISITE" ,length = 4000)
private String prbvisite;
@Column (name="ETAT",length=4000)
private String etat;
@Column (name="ANNEE",length=4000)
private String annee;
public void setAnnee(String annee) {
this.annee = annee;
}
public String getAnnee() {
return annee;
}
public void setEtat(String etat) {
this.etat = etat;
}
public String getEtat() {
return etat;
}
public void setPrbvisite(String prbvisite) {
this.prbvisite = prbvisite;
}
public String getPrbvisite() {
return prbvisite;
}
public void setMoisviste(int moisviste) {
this.moisviste = moisviste;
}
public int getMoisviste() {
return moisviste;
}
public void setIngAff(String ingAff) {
this.ingAff = ingAff;
}
public String getIngAff() {
return ingAff;
}
@Column(length = 4000)
private String dep;
@Id
@Column(nullable = false, length = 4000)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Visite_Id_Seq_Gen")
private String idvisite;
@Column(length = 4000)
private String nbvisites;
@OneToMany(mappedBy = "visite")
private List<Intervention> interventionList;
@OneToMany(mappedBy = "visite",cascade =CascadeType.ALL)
private List<Datevisite> datevisiteList;
public Visite() {
}
public Visite(String client, String dep, String idvisite, String nbvisites, String ingAff) {
this.client = client;
this.dep = dep;
this.idvisite = idvisite;
this.nbvisites = nbvisites;
this.ingAff = ingAff;
}
public String getClient() {
return client;
}
public void setClient(String client) {
this.client = client;
}
public String getDep() {
return dep;
}
public void setDep(String dep) {
this.dep = dep;
}
public String getIdvisite() {
return idvisite;
}
public void setIdvisite(String idvisite) {
this.idvisite = idvisite;
}
public String getNbvisites() {
return nbvisites;
}
public void setNbvisites(String nbvisites) {
this.nbvisites = nbvisites;
}
public Intervention addIntervention(Intervention intervention) {
getInterventionList().add(intervention);
intervention.setVisite(this);
return intervention;
}
public Datevisite addDatevisite(Datevisite datevisite) {
getDatevisiteList().add(datevisite);
datevisite.setVisite(this);
return datevisite;
}
public List<Datevisite> getDatevisiteList() {
return datevisiteList;
}
public List<Intervention> getInterventionList() {
return interventionList;
}
public Intervention removeIntervention(Intervention intervention) {
getInterventionList().remove(intervention);
intervention.setDossier(null);
return intervention;
}
public Datevisite removeDatevisite(Datevisite datevisite) {
getDatevisiteList().remove(datevisite);
datevisite.setVisite(null);
return datevisite;
}
public void setDatevisiteList(List<Datevisite> datevisiteList) {
this.datevisiteList = datevisiteList;
}
public void setInterventionList(List<Intervention> interventionList) {
this.interventionList = interventionList;
}
}
и вот мой Datevisite
сущность
package model.entitie;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.ColumnResult;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import model.entitie.Visite;
@Entity
@NamedQueries({ @NamedQuery(name = "Datevisite.findAll", query = "select o from Datevisite o") })
@SequenceGenerator(name = "DateVisite_Id_Seq_Gen", sequenceName = "DATEVISITE_SEQ", allocationSize = 1,
initialValue = 50)
public class Datevisite implements Serializable {
@SuppressWarnings("compatibility:-1921858317195121496")
private static final long serialVersionUID = -341535626783197699L;
@Id
@Column(nullable = false, length = 4000)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "DateVisite_Id_Seq_Gen")
private String iddatevis;
@Column(name = "DESCRPTION")
private String description;
@Column(name = "CLIENTVISITE")
private String ClientVisite;
@Column(name = "DEPDV")
private String depdv;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "VISITE_ID",insertable=false, updatable=false)
private Visite visite;
@Column(name="MOISDATEVIS")
private String moisvisite;
public void setMoisvisite(String moisvisite) {
this.moisvisite = moisvisite;
}
public String getMoisvisite() {
return moisvisite;
}
public void setAnneedatevisite(String anneedatevisite) {
this.anneedatevisite = anneedatevisite;
}
public String getAnneedatevisite() {
return anneedatevisite;
}
public void setNbvisited(String nbvisited) {
this.nbvisited = nbvisited;
}
public String getNbvisited() {
return nbvisited;
}
public void setIng(String ing) {
this.ing = ing;
}
public String getIng() {
return ing;
}
public void setEtatdatevisite(String etatdatevisite) {
this.etatdatevisite = etatdatevisite;
}
public String getEtatdatevisite() {
return etatdatevisite;
}
@Column(name="ANNEEDATEVISITE")
private String anneedatevisite;
@Column(name="NBVISITED")
private String nbvisited;
@Column(name="ING")
private String ing;
@Column(name="ETATDATEVISITE")
private String etatdatevisite;
public void setDepdv(String depdv) {
this.depdv = depdv;
}
public String getDepdv() {
return depdv;
}
public void setClientVisite(String ClientVisite) {
this.ClientVisite = ClientVisite;
}
public String getClientVisite() {
return ClientVisite;
}
public void setDescription(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public Datevisite() {
}
public Datevisite(String iddatevis, Visite visite, String ClientVisite, String depdv) {
this.iddatevis = iddatevis;
this.visite = visite;
this.depdv = depdv;
this.ClientVisite = ClientVisite;
}
public String getIddatevis() {
return iddatevis;
}
public void setIddatevis(String iddatevis) {
this.iddatevis = iddatevis;
}
public Visite getVisite() {
return visite;
}
public void setVisite(Visite visite) {
this.visite = visite;
}
}
и здесь, как я упорствовать мой ребенок лицо
public Datevisite persistDatevisite(Datevisite datevisite) {
datevisite.setDepdv(datevisite.getVisite().getDep());
datevisite.setClientVisite(datevisite.getVisite().getClient());
datevisite.setDescription(datevisite.getVisite().getPrbvisite());
datevisite.setAnneedatevisite(datevisite.getVisite().getAnnee());
datevisite.setNbvisited(datevisite.getVisite().getNbvisites());
datevisite.setIng(datevisite.getVisite().getIngAff());
datevisite.setEtatdatevisite(datevisite.getVisite().getEtat());
em.persist(datevisite);
return datevisite;
}
Как вы * создаете * новый объект 'Datevisite', прежде чем вы его сохраняете? В вашем вопросе не возникает ничего похожего на то, что это должно приводить к дублированию данных из одного вызова 'persistDatevisite' к следующему, так что кажется, что проблема в другом месте. –
Вначале я не сохраняю родителя (visite), чем я сохраняю ребенка (datavisite) .. Я попытался смыть сущность перед сохранением datevisite и всегда с той же проблемой – user3419507
Пожалуйста, покажите код, который создает и заполняет объект 'Datevisite' перед этим передается методу 'persistDatevisite'. –