2013-08-24 37 views
8

我正在嘗試使用註釋的一對一關係。
這是代碼。org.hibernate.AnnotationException:未知mappedBy in:error

package test.hibernate; 

@Entity 
@Table(name="EMPLOYEE") 

public class Employee { 
    @Id 
    @GeneratedValue 
    @Column(name="EMP_ID") 
    private Long empID; 

    @Column(name="fName") 
    private String fName; 

    @Column(name="lName") 
    private String lName; 

    @OneToOne(mappedBy="employee", cascade=CascadeType.ALL) 
    private Address address; 


    public Employee(/* Long empID, */String fName, String lName) { 
     super(); 
     // this.empID = empID; 
     this.fName = fName; 
     this.lName = lName; 
    } 

    public Employee() { 
     super(); 
    } 

    public Long getEmpID() { 
     return empID; 
    } 

    public void setEmpID(Long empID) { 
     this.empID = empID; 
    } 

    public String getfName() { 
     return fName; 
    } 

    public void setfName(String fName) { 
     this.fName = fName; 
    } 

    public String getlName() { 
     return lName; 
    } 

    public void setlName(String lName) { 
     this.lName = lName; 
    } 

    public Address getAddress() { 
     return address; 
    } 

    public void setAddress(Address address) { 
     this.address = address; 
    } 
} 


package test.hibernate; 

@NamedNativeQueries({ @NamedNativeQuery(name = "addressQuery", query = "from Address", resultClass = Address.class) }) 

public class Address { 

    @Column(name = "EMP_ID") 
    @GenericGenerator(name = "gen", strategy = "foreign", parameters = @Parameter(name = "property", value = "employee")) 
    private Long empID; 

    @Column(name = "ADDRESS") 
    private String address; 

    @Column(name = "CITY") 
    private String city; 

    @OneToOne 
    @PrimaryKeyJoinColumn 
    private Employee employee; 

    public Address() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    public Address(/* Long empID, */String address, String city) { 
     super(); 
     // this.empID = empID; 
     this.address = address; 
     this.city = city; 
    } 

    public Long getEmpID() { 
     return empID; 
    } 

    public void setEmpID(Long empID) { 
     this.empID = empID; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    public Employee getEmployee() { 
     return employee; 
    } 

    public void setEmployee(Employee employee) { 
     this.employee = employee; 
    } 


} 

} 

我得到以下異常:

Hibernate one to many (XML Mapping) 
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). 
log4j:WARN Please initialize the log4j system properly. 
org.hibernate.AnnotationException: Unknown mappedBy in: test.hibernate.Employee.address, referenced property unknown: test.hibernate.Address.employee 
    at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:129) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1127) 
    at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:296) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1283) 
    at test.hibernate.HibernateUtil.openSession(HibernateUtil.java:14) 
    at test.hibernate.Test.main(Test.java:11) 
Exception in thread "main" java.lang.NullPointerException 
    at test.hibernate.HibernateUtil.openSession(HibernateUtil.java:19) 
    at test.hibernate.Test.main(Test.java:11) 

什麼是錯我的代碼?有人可以幫忙嗎?

+2

請發佈您的地址類。 – Rafa

+1

並閱讀錯誤消息:「引用屬性未知:test.hibernate.Address.employee」 –

+0

Yori,我已經發布了Address類。剛剛將它從Employee分離出來。 – Aniket

回答

16

問題不是mappedBy本身的價值。問題在於Address類中沒有@Entity註釋。添加它將解決問題。在Java SE環境類中也應該添加到persistence.xml中。

+0

謝謝Mikko .. !!你的建議奏效了。但是現在我面臨另一個問題,我編輯了我原來的帖子。你能幫忙嗎? – Aniket

+2

@Aniket嘿,接受答案,如果它解決了你的原始問題。如果您還有其他問題,請提出另一個問題。如果你不這樣做,你會在社區中聲譽不佳。 – prageeth

+2

@Aniket不斷變化的問題使得這個網站陷入混亂,因爲在新的環境下,對原始問題的回答看起來很奇怪。隨意帶回原來的問題,並單獨提出新的問題。 –

0

如果我們沒有在hibernate配置文件中指定映射類條目<mapping class="test.hibernate.Address" />,則會發生同樣的異常。

相關問題