2013-08-24 9 views
8

Ich versuche Eins-zu-Eins-Beziehungen mit Anmerkungen.
Dies ist der Code.org.hibernate.AnnotationException: Unknown mappedBy in: Fehler

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


} 

} 

ich die folgende Ausnahme erhalten:

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) 

Was mit meinem Code falsch? Kann jemand helfen?

+2

Bitte posten Sie Ihre Adressklasse. – Rafa

+1

Und lesen Sie die Fehlermeldung: "referenzierte Eigenschaft unbekannt: test.hibernate.Address.employee" –

+0

Yori, ich habe bereits die Address-Klasse veröffentlicht. Gerade jetzt getrennt von Mitarbeiter. – Aniket

Antwort

16

Problem ist nicht der Wert von mappedBy selbst. Problem ist, dass es keine Annotation in Address Klasse gibt. Das Hinzufügen wird ein Problem lösen. In Java sollte die SE-Umgebungsklasse auch zu persistence.xml hinzugefügt werden.

+0

Danke Mikko .. !! Dein Vorschlag hat funktioniert. Aber jetzt habe ich ein anderes Problem, ich habe meinen ursprünglichen Beitrag bearbeitet. Können Sie bitte helfen? – Aniket

+2

@Aniket hey, akzeptieren Sie die Antwort, wenn es Ihr ursprüngliches Problem gelöst hat. Stellen Sie eine weitere Frage, wenn Sie weitere Probleme haben. Du wirst einen schlechten Ruf in der Gemeinschaft bekommen, wenn du es nicht tust. – prageeth

+2

@Aniket Die sich ändernde Frage macht diese Seite völlig durcheinander, weil in einem neuen Kontext Antworten auf ursprüngliche Fragen eher merkwürdig aussehen. Fühlen Sie sich frei, ursprüngliche Frage zurückzubringen und neue separat darzustellen. –

0

Die gleiche Ausnahme tritt auf, wenn wir den Zuordnungsklasseneintrag <mapping class="test.hibernate.Address" /> in der Konfigurationsdatei für den Ruhezustand nicht angeben.

Verwandte Themen