2016-04-05 6 views
1

Ich bin nur nicht den Punkt hier, Ich versuche, Java JPA mit einer Hibernate-Implementierung mit @ OneToMany Mapping hier einzurichten und habe diesen FehlerVerursacht von: org.hibernate.AnnotationException: @OneToOne oder @ManyToOne auf

Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on org.ppbni.splatter.model.KodePos.kode_korwil references an unknown entity: java.lang.String 
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:107) 
at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1550) 
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1473) 
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1389) 
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1345) 
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:720) 
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:188) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479) 

das ist meine Kode_Pos Klasse,

package org.ppbni.splatter.model; 

import java.io.Serializable; 
import javax.persistence.Column; 
import javax.persistence.FetchType; 
import javax.persistence.JoinColumn; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Entity; 
import javax.persistence.MapsId; 
import javax.persistence.PrimaryKeyJoinColumn; 
import javax.persistence.Table; 
import javax.persistence.ManyToOne; 
import javax.persistence.CascadeType; 

@SuppressWarnings("serial") 
@Entity 
@Table(name="kode_pos") 
public class KodePos implements Serializable{ 

private String kode_pos; 
private String kode_korwil; 
private String kelurahan; 
private String kecamatan; 

@Id 
@Column(name="kode_pos", unique=true, nullable=false) 
public String getKode_pos() { 
    return kode_pos; 
} 
public void setKode_pos(String kode_pos) { 
    this.kode_pos = kode_pos; 
} 
@Column(name="kelurahan") 
public String getKelurahan() { 
    return kelurahan; 
} 
public void setKelurahan(String kelurahan) { 
    this.kelurahan = kelurahan; 
} 
@Column(name="kecamatan") 
public String getKecamatan() { 
    return kecamatan; 
} 
public void setKecamatan(String kecamatan) { 
    this.kecamatan = kecamatan; 
} 

private Korwil korwil; 

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name="kode_korwil") 
public Korwil getKorwil() { 
    return korwil; 
} 
public void setKorwil(Korwil korwil) { 
    this.korwil = korwil; 
} 

/** 
* @param args 
*/ 

} 

und das ist meine korwil Klasse,

package org.ppbni.splatter.model; 

import java.io.Serializable; 
import java.util.Set; 
import javax.persistence.Column; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Entity; 
import javax.persistence.JoinColumn; 
import javax.persistence.MapsId; 
import javax.persistence.PrimaryKeyJoinColumn; 
import javax.persistence.Table; 
import javax.persistence.OneToMany; 
import javax.persistence.OneToOne; 
import javax.persistence.CascadeType; 

@SuppressWarnings("serial") 
@Entity 
@Table(name="korwil") 
public class Korwil implements Serializable{ 

private String kode_korwil; 
private String no_dana; 
private String nama_korwil; 
private String alias_jabatan; 
private String jabatan_korwil; 

@Id 
@Column(name="kode_korwil", unique=true, nullable=false) 
public String getKode_korwil() { 
    return kode_korwil; 
} 
public void setKode_korwil(String kode_korwil) { 
    this.kode_korwil = kode_korwil; 
} 
@Id 
@JoinColumn(name="no_dana") 
public String getNo_dana() { 
    return no_dana; 
} 
public void setNo_dana(String no_dana) { 
    this.no_dana = no_dana; 
} 
@Column(name="nama_korwil") 
public String getNama_korwil() { 
    return nama_korwil; 
} 
public void setNama_korwil(String nama_korwil) { 
    this.nama_korwil = nama_korwil; 
} 
@Column(name="alias_jabatan") 
public String getAlias_jabatan() { 
    return alias_jabatan; 
} 
public void setAlias_jabatan(String alias_jabatan) { 
    this.alias_jabatan = alias_jabatan; 
} 
@Column(name="jabatan_korwil") 
public String getJabatan_korwil() { 
    return jabatan_korwil; 
} 
public void setJabatan_korwil(String jabatan_korwil) { 
    this.jabatan_korwil = jabatan_korwil; 
} 

private Set<KodePos> kodepos; 

@OneToMany(fetch = FetchType.LAZY, mappedBy="korwil") 
public Set<KodePos> getKodepos() { 
    return kodepos; 
} 
public void setKodepos(Set<KodePos> kodepos) { 
    this.kodepos = kodepos; 
} 

/** 
* @param args 
*/ 

} 

jede Hilfe Vergnügen sein wird :)

+0

Nun, Assoziationen sind zwischen Entitäten, nicht zwischen einer Entität und einem String. –

+0

@JBNizet hmm, was soll es sein ?? –

+3

Es ist ziemlich unklar, da ich keine Ahnung davon habe, was diese Wörter bedeuten. Wenn Sie jedoch ein Entitäts-Quiz mit vielen Fragen haben, dann sollten Sie ein ManyToOne auf dem Feld-Quiz der Klasse Question haben, und dieses Feld sollte vom Typ Quiz sein, nicht vom Typ String: Eine Frage gehört zu einem Quiz, nicht zu ein String –

Antwort

2
@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name="kode_korwil", nullable=false) 
public Korwil getKode_korwil() { //return type must be Korwil not String 
    return kode_korwil; 
} 

und ich denke,

@Id 
@JoinColumn(name="no_dana") //Column instead JoinColumn ?? 
public String getNo_dana() { 
    return no_dana; 
} 

auch eine der @Id Anmerkung entfernen, da Sie 2 Id Anmerkung haben, sollte jedes Unternehmen haben nur eine Id

@Id <--------------------------------- remove one of @ID annotation. 
@Column(name="kode_korwil", unique=true, nullable=false) 
public String getKode_korwil() { 
    return kode_korwil; 
} 

@Id <--------------------------------- remove one of @ID annotation. 
@JoinColumn(name="no_dana") 
public String getNo_dana() { 
    return no_dana; 
} 
+0

K für diese '@JoinColumn (name =" no_dana ")' es ist in Ordnung, weil es zu einer anderen Klasse verbinden, ich werde Ihren Vorschlag versuchen ~ –

+1

@ splatter_fadli Wenn es sich um eine Referenzspalte handelt, kann ihr Typ nicht String sein, und sie muss auch ID sein. id –

+0

Ich habe die Klasse bearbeitet, aber danach einen anderen Fehler gefunden. Ursache: org.hibernate.AnnotationException: Ein Fremdschlüssel verweist darauf org.ppbni.splatter.model.Korwil von org.ppbni.splatter.model.KodePos hat die falsche Spaltennummer. sollte 2' –

1

Wenn Sie eine Entitätsbeziehung zuordnen, muss das Zielobjekt eine Entität sein.

Versuchen Sie dies auf KodePos

public class Korwil implements Serializable{ 

    private Korwil kode_korwil; 
    ... 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name="kode_korwil", nullable=false) 
    public Korwil getKode_korwil() { 
    return kode_korwil; 
    } 

I Abbildungsbeziehung in der Regel auf dem Feld tun so vielleicht verloren ich etwas auf dem Grundstück mappging.

Über no_dana ich denke, Yusuf K. hat Recht. Es muss eine Spalte sein, und wenn es ein Feld in einer Relation ist, müssen Sie eine neue Eigenschaft mit dem Mapping und der richtigen Klasse hinzufügen. Sie müssen Updates und Einfügungen in beiden vermeiden. Nur eine Eigenschaft sollte aktualisiert werden:

@Id 
@Column(name="no_dana") 
public String getId() { 
... 
@<rel_map_annot> 
@JoinColumn(name="no_dana", insertable=false, updatable=false) 
public NoDana getNoDana() { 
... 

Hoffe es hilft!

+0

Ich habe die CodePos-Klasse bearbeitet, aber mit einem anderen Fehler 'verursacht durch: org.hibernate.AnnotationException: Ein Fremdschlüssel, der org.ppbni.splatter.model.Korwil von org.ppbni.splatter.model.KodePos verweist, hat die falsche Spaltennummer. sollte 2' –

+2

Yusuf letzten Kommentar ist richtig! Nur eine @Id nach Entität! – Leo

+1

Die Korwil-Tabelle ist Single-Taste, nach dem Löschen einer der '@ Id' ist alles in Ordnung –

Verwandte Themen