it-swarm.com.de

Verursacht durch: org.hibernate.AnnotationException: mappedBy verweist auf eine unbekannte Zielentitätseigenschaft

Ich muss eine einzige Beziehung herstellen, aber dieser Fehler erscheint MappedBy verweist auf eine unbekannte Zielentitätseigenschaft Dies ist das übergeordnete 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;
    }
}

und diese untergeordnete Klasse

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;
    }

}
19

Sie müssen das mappedBy-Attribut der @OneToMany-Annotation auf psyQuestions anstelle von question setzen. Der Wert von mappedBy attributes ist der Name des Klassenfeldes auf der anderen Seite der Beziehung, in diesem Fall psyQuestions der Seite ManyToOne der Klasse PsyOptions.

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

Ich hatte das gleiche Problem, weil in der Quellentität "mappedBy" als "Registrierung" definiert wurde (mit @OneToMany kommentiert), die entsprechende Eigenschaft in der Zielentität jedoch "bankEnrollment" war. Dies ist die mit @ManyToOne annotierte Eigenschaft.

Nach der Aktualisierung von der Registrierung auf bankEnrollment in der Quellentität ist die Ausnahme (wie erwartet) verschwunden. 

Lektion gelernt: Der Wert für mappedBy (z. B. psyQuestions) sollte als Eigenschaftsname in der Zielentität vorhanden sein. 

3
user1048931

Nicht sicher, ob dies jemandem helfen wird, es war ein einfacher Fehler, der diesen Fehler in meiner Konfiguration verursacht hat. Ohne es zu merken, hatte ich zwei verschiedene Pakete mit Domain-Klassendateien. Das zugeordnete Mitglied befand sich im anderen Paket, während die Anwendung nur einen einzelnen Paketpfad durchsuchte. 

Es war schwer herauszufinden, da sie sich nur durch ein einzelnes Zeichen unterschieden, z. org.abc.core.domains und org.abcs.core.domains. 

Ein anderes Paket zu den @ @ Konfigurations-Scannern wurde hinzugefügt, das das Problem für mich gelöst hat. 

0
Charith