Вызывается: org.hibernate.AnnotationException: mappedBy ссылается на неизвестное свойство целевой сущности

Мне нужно сделать onetomany отношения, но эта ошибка появляется 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;
    }

}

Ответы

Ответ 1

Вам нужно установить атрибут mappedBy аннотации @OneToMany на psyQuestions вместо вопроса. Значение атрибутов mappedBy - это имя поля класса на другой стороне отношения, в данном случае psyQuestions стороны ManyToOne класса PsyOptions.

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

Ответ 2

У меня была такая же проблема, потому что mappedBy в исходной сущности был определен как "регистрация" (аннотируется с @OneToMany), но соответствующее свойство в целевом объекте было "bankEnrollment"; это свойство, аннотированное с помощью @ManyToOne.

После обновления от регистрации до bankEnrollment в исходной сущности исключение прошло (как ожидается.

Извлеченный урок: значение mappedBy (например, psyQuestions) должно существовать как имя свойства в целевом объекте.

Ответ 3

Не уверен, что это поможет кому-либо, это была простая ошибка, вызвавшая эту ошибку в моей конфигурации. Не осознавая, у меня было два разных пакета, содержащих файлы классов домена. Mapped-член находился в другом пакете, тогда как приложение просматривало только один путь пакета.

Трудно было понять, как они отличались только от одного символа, например. org.abc.core.domains и org.abcs.core.domains.

Добавлен другой пакет в базу данных. @configuration scanners решили проблему для меня.