2013-08-24 15 views
8

Próbuję relacji jeden do jednego przy użyciu adnotacji.
To jest kod.org.hibernate.AnnotationException: Unknown 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; 
    } 


} 

} 

otrzymuję następujący wyjątek:

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) 

Co jest nie tak z moim kodu? Czy ktoś może pomóc?

+2

Opublikuj swoją klasę adresu. – Rafa

+1

I przeczytaj komunikat o błędzie: "Właściwość referencyjna nieznana: test.hibernate.Address.employee" –

+0

Yori, Opublikowaliśmy już klasę adresu. Właśnie teraz oddzieliłem go od pracownika. – Aniket

Odpowiedz

16

Problem nie jest wartością samej mappedBy. Problem polega na tym, że nie ma adnotacji @Entity w klasie Address. Dodanie go rozwiąże problem. W Java SE klasa środowiska powinna również zostać dodana do pliku persistence.xml.

+0

Dzięki Mikko .. !! Twoja sugestia zadziałała. Ale teraz mam do czynienia z innym problemem, zmieniłem swój pierwotny post. Czy możesz mi pomóc? – Aniket

+2

@Aniket hej, zaakceptuj odpowiedź, jeśli rozwiązała pierwotny problem. Zadaj kolejne pytanie, jeśli masz więcej problemów. Jeśli nie, uzyskasz złą opinię wśród społeczności. – prageeth

+2

@Aniket Zmiana pytania w pełni sprawia, że ​​ta strona nie działa, ponieważ w nowym kontekście odpowiedzi na oryginalne pytania wyglądają dość dziwnie. Zachęcamy do przedstawienia oryginalnego pytania i przedstawienia nowego osobno. –

0

Ten sam wyjątek wystąpi, jeśli nie określimy wpisu klasy mapowania <mapping class="test.hibernate.Address" /> w pliku konfiguracyjnym hibernacji.

Powiązane problemy