2013-08-24 14 views
8

注釈を使用して1対1の関係を試しています。
これはコードです。org.hibernate.AnnotationException:不明なmappedBy in:エラー

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

ハイバネート設定ファイルでマッピングクラスエントリ<mapping class="test.hibernate.Address" />を指定しない場合も同じ例外が発生します。