java 导致错误:org. hib.mappedBy引用未知目标实体属性

toiithl6  于 2023-04-04  发布在  Java
关注(0)|答案(5)|浏览(194)

我需要建立一个对任何关系,但出现此错误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;
    }

}
azpvetkf

azpvetkf1#

您需要将@OneToMany注解的mappedBy属性设置为psyQuestions而不是questionmappedBy属性的值是关系另一端的class字段的名称,在本例中为类PsyOptions的ManyToOne端的psyQuestions

public class PsyQuestions {
....
@OneToMany(fetch = FetchType.LAZY,mappedBy="psyQuestions")
private List<PsyOptions> productlist=new ArrayList<PsyOptions>();
....
ldioqlga

ldioqlga2#

我遇到了同样的问题,因为源实体中的mappedBy被定义为“enrollment”(用@OneToMany注解),但目标实体中相应的属性是“bankEnrollment”;这是用@ManyToOne注解的属性。
在源实体中从enrollment更新为bankEnrollment之后,异常消失(如预期的那样_)。
经验教训:mappedBy值(例如,psyQuestions)应该作为目标实体中的属性名称存在。

a0x5cqrl

a0x5cqrl3#

不知道这是否会帮助任何人,这是一个简单的错误导致了我的配置上的这个错误。没有意识到我有两个不同的包包含域类文件。Map的成员在另一个包中,而应用程序只扫描单个包路径。
很难弄清楚,因为它们只是一个字符的不同,例如org.abc.core.domains和org.abcs.core.domains。
添加其他包到数据库 @Configuration 扫描器解决了我的问题。

svmlkihl

svmlkihl4#

我只是纠正了我的Map,它解决了这个问题。

...
     @OneToMany(fetch = FetchType.LAZY,mappedBy="question")
...
kse8i1jr

kse8i1jr5#

当HibernateMap注解的“mappedBy”属性中指定的属性名称与目标实体中的实际属性名称不匹配时,通常会发生此错误。
下面是此错误可能发生的示例:
假设你有两个实体:“Order”和“OrderLineItem”,并且您希望将一对多关系从OrderMap到OrderLineItem。您可以按如下方式定义Order实体上的Map:

@OneToMany(mappedBy="order")
private List<OrderLineItem> lineItems;

在此Map中,“mappedBy”属性指定OrderLineItem实体中的“order”属性是关系的反向端。
现在假设在mappedBy属性中指定的属性名称中有一个拼写错误,如下所示:

@OneToMany(mappedBy="orders")
private List<OrderLineItem> lineItems;

在这种情况下,Hibernate将无法在OrderLineItem实体中找到“orders”属性,并且会抛出“mappedBy reference an unknown target entity property”错误。
若要修复此错误,应仔细检查mappedBy属性中指定的属性名称是否与目标实体中的实际属性名称匹配。

相关问题