Je dois établir une relation onetomany, mais cette erreur apparaît. MappedBy référence une propriété d'entité cible inconnue, il s'agit du parent Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property
.
package com.dating.model;
import Java.util.ArrayList;
import Java.util.Collection;
import Java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="question")
public class PsyQuestions {
@Id
@GenericGenerator(name="autoGen" ,strategy="increment")
@GeneratedValue(generator="autoGen")
@Column(name="questionid")
private long psyQuestionId;
@Column(name="questiontext")
private String question;
@OneToMany(fetch = FetchType.LAZY,mappedBy="question")
private List<PsyOptions> productlist=new ArrayList<PsyOptions>();
public PsyQuestions() {
super();
}
public List<PsyOptions> getProductlist() {
return productlist;
}
public void setProductlist(List<PsyOptions> productlist) {
this.productlist = productlist;
}
public long getPsyQuestionId() {
return psyQuestionId;
}
public void setPsyQuestionId(long psyQuestionId) {
this.psyQuestionId = psyQuestionId;
}
public String getQuestion() {
return question;
}
public void setQuestion(String question) {
this.question = question;
}
}
et cette classe d'enfant
package com.dating.model;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="option")
public class PsyOptions {
@Id
@GenericGenerator(name="autoGen" ,strategy="increment")
@GeneratedValue(generator="autoGen")
@Column(name="optionid")
private long psyOptionId;
@Column(name="optiontext")
private String optionText;
@JoinColumn(name = "questionid")
@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
PsyQuestions psyQuestions;
public PsyOptions() {
super();
}
public PsyQuestions getPsyQuestions() {
return psyQuestions;
}
public void setPsyQuestions(PsyQuestions psyQuestions) {
this.psyQuestions = psyQuestions;
}
public long getPsyOptionId() {
return psyOptionId;
}
public void setPsyOptionId(long psyOptionId) {
this.psyOptionId = psyOptionId;
}
public String getOptionText() {
return optionText;
}
public void setOptionText(String optionText) {
this.optionText = optionText;
}
}
Vous devez définir l'attribut mappedBy
de l'annotation @OneToMany
sur psyQuestions au lieu de question . La valeur de mappedBy
attributs est le nom du champ de classe situé de l’autre côté de la relation, dans ce cas psyQuestions du côté ManyToOne
de la classe PsyOptions.
public class PsyQuestions {
....
@OneToMany(fetch = FetchType.LAZY,mappedBy="psyQuestions")
private List<PsyOptions> productlist=new ArrayList<PsyOptions>();
....
J'ai eu le même problème parce que mappedBy dans l'entité source était défini sur "inscription" (annoté avec @OneToMany) mais que la propriété correspondante dans l'entité cible était "bankEnrollment"; c'est la propriété annotée avec @ManyToOne.
Après la mise à jour de l’enregistrement à la banque dans l’entité source, l’exception a disparu (comme prévu_.
Leçon apprise: la valeur mappedBy (par exemple, psyQuestions) doit exister en tant que nom de propriété dans l'entité cible.
Je ne sais pas si cela va aider qui que ce soit, c’est une simple erreur qui a causé cette erreur sur ma configuration. Sans me rendre compte, j'ai eu deux packages différents contenant des fichiers de classe de domaine. Le membre mappé se trouvait dans l'autre package alors que l'application analysait uniquement le chemin d'un seul package.
Il était difficile de comprendre car ils n'étaient différents que par un seul caractère, par exemple. org.abc.core.domains et org.abcs.core.domains.
L'ajout d'un autre package aux analyseurs de base de données @configuration a résolu le problème pour moi.