2016-04-05 45 views
1

我只是沒有得到這裏的意思, 我想設置java的JPA與hibernate實現使用@OneToMany映射在這裏,並得到這個錯誤引起:org.hibernate.AnnotationException:@OneToOne或@ManyToOne在

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) 

這是我Kode_Pos類,

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 
*/ 

} 

,這是我korwil類,

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 
*/ 

} 

任何幫助將是快樂:)

+0

那麼,關聯是在實體之間,而不是在實體和字符串之間。 –

+0

@JBNizet嗯,它應該是什麼? –

+3

這是相當不清楚的,因爲我不知道這些詞的意思。但是如果你有一個實體測驗,有很多問題,那麼你應該有一個ManyToOne對類問題的現場測驗,這個字段應該是類型測驗,而不是字符串類型:一個問題屬於測驗,而不是a String –

回答

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

,我認爲

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

同時刪除@Id註釋之一,因爲你有2個編號標註,每個實體只能有一個標識

@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這個'@JoinColumn(name =「no_dana」)'這很好,因爲它連接到另一個班級,我會嘗試你的建議〜 –

+1

@ splatter_fadli如果它是一個引用列,它的類型不能是字符串,也必須是嵌入ID,而不是ID –

+0

我已經編輯了類,但在那之後面臨另一個錯誤'引起:org.hibernate.AnnotationException:外鍵引用org.ppbni.splatter.model.KodePos中的org.ppbni.splatter.model.Korwil列數錯誤。應該是2' –

1

當您映射實體關係時,目標對象必須是實體。

請嘗試對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; 
    } 

我通常做的映射關係,在現場,所以也許我失去了對財產mappging東西。

關於no_dana,我認爲Yusuf K.是對的。它必須是一個列,如果它是一個關係中的一個字段,則必須添加一個具有映射和正確類的新屬性。您必須避免更新並在兩者中插入。只有一個屬性可以更新:

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

希望它有幫助!

+0

我編輯了kodePos類但面臨另一個錯誤'由於: org.hibernate.AnnotationException:引用org.ppbni.splatter.model.KodePos中的org.ppbni.splatter.model.Korwil的外鍵具有錯誤的列數。應該是2' –

+2

Yusuf最後的評論是正確的!實體只有一個@Id! – Leo

+1

korwil表是單鍵,刪除其中一個'@Id'後一切正常 –

相關問題