2013-12-08 10 views
16

ho bisogno di fare rapporto OneToMany ma appare questo errore mappedBy riferimento una proprietà un'entità obiettivo sconosciuto questo è genitore Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity propertycausati da: org.hibernate.AnnotationException: mappedBy riferimento una proprietà sconosciuta entità di destinazione

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

e questa classe bambino

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

} 

risposta

27

È necessario impostare l'attributo mappedBy del @OneToMany annotazione a psyQuestions anziché domanda. Il valore degli attributi mappedBy è il nome del campo classe sull'altro lato della relazione, in questo caso psyQuestions del lato ManyToOne della classe PsyOptions.

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

attributo mappedBy già impostato per l'entità psyQuestions che mappa sulla tabella delle domande –

+0

@AliAliAbdelFatah il codice che hai pubblicato mostra '@OneToMany (fetch = FetchType.LAZY, mappedBy =" question ")'. Questo deve cambiare come menzionato nella risposta. – melc

+0

grazie mille è risolto il mio errore è mettere il nome della tabella in mappedBy attributo –

3

Ho avuto lo stesso problema perché il mappedBy nell'entità origine è stato definito "iscrizione" (annotato con @OneToMany), ma la proprietà corrispondente nell'entità obiettivo era "bankEnrollment"; questa è la proprietà annotata con @ManyToOne.

Dopo aver aggiornato da iscrizione al bankEnrollmentin l'entità di origine, l'eccezione è andato via (come expected_

Lezione imparata:. Il valore mappedBy (ad es psyQuestions) dovrebbe esistere come un nome di proprietà nell'entità di destinazione

0
.

Non sono sicuro che questo possa aiutare qualcuno, è stato un semplice errore a causare questo errore sulla mia configurazione Senza rendermi conto che ho avuto due pacchetti diversi contenenti file di classe dominio. Il membro mappato era nell'altro pacchetto mentre l'applicazione era solo in scansione singola percorso pacchetto

Era difficile da fi gura come erano diversi solo da un singolo carattere, ad es. org.abc.core.domains e org.abcs.core.domains.

Aggiunto altro pacchetto al database scanner @configuration risolto il problema per me.

Problemi correlati