我需要建立一个对任何关系,但出现此错误mappedBy引用未知的目标实体属性这是父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;
}
}
这个子类
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;
}
}
5条答案
按热度按时间azpvetkf1#
您需要将
@OneToMany
注解的mappedBy
属性设置为psyQuestions而不是question。mappedBy
属性的值是关系另一端的class字段的名称,在本例中为类PsyOptions的ManyToOne
端的psyQuestions。ldioqlga2#
我遇到了同样的问题,因为源实体中的mappedBy被定义为“enrollment”(用@OneToMany注解),但目标实体中相应的属性是“bankEnrollment”;这是用@ManyToOne注解的属性。
在源实体中从enrollment更新为bankEnrollment之后,异常消失(如预期的那样_)。
经验教训:mappedBy值(例如,psyQuestions)应该作为目标实体中的属性名称存在。
a0x5cqrl3#
不知道这是否会帮助任何人,这是一个简单的错误导致了我的配置上的这个错误。没有意识到我有两个不同的包包含域类文件。Map的成员在另一个包中,而应用程序只扫描单个包路径。
很难弄清楚,因为它们只是一个字符的不同,例如org.abc.core.domains和org.abcs.core.domains。
添加其他包到数据库 @Configuration 扫描器解决了我的问题。
svmlkihl4#
我只是纠正了我的Map,它解决了这个问题。
kse8i1jr5#
当HibernateMap注解的“mappedBy”属性中指定的属性名称与目标实体中的实际属性名称不匹配时,通常会发生此错误。
下面是此错误可能发生的示例:
假设你有两个实体:“Order”和“OrderLineItem”,并且您希望将一对多关系从OrderMap到OrderLineItem。您可以按如下方式定义Order实体上的Map:
在此Map中,“mappedBy”属性指定OrderLineItem实体中的“order”属性是关系的反向端。
现在假设在mappedBy属性中指定的属性名称中有一个拼写错误,如下所示:
在这种情况下,Hibernate将无法在OrderLineItem实体中找到“orders”属性,并且会抛出“mappedBy reference an unknown target entity property”错误。
若要修复此错误,应仔细检查mappedBy属性中指定的属性名称是否与目标实体中的实际属性名称匹配。