2013-08-24 2 views
8

Я пытаюсь установить отношения один к одному с помощью аннотаций.
Это код.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; 
    } 


} 

} 

Я получаю следующее исключение:

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

Йори, я уже опубликовал класс Address. Просто отделил его от Employee. – Aniket

ответ

16

Проблема не в значении mappedBy. Проблема в том, что в Address аннотация отсутствует. Добавление его решит проблему. В среде Java SE класс среды также должен быть добавлен в файл persistence.xml.

+0

спасибо Mikko .. !! Ваше предложение сработало. Но теперь я столкнулся с другой проблемой, я отредактировал свой оригинальный пост. Не могли бы вы помочь? – Aniket

+2

@ Аникете, ответьте, если он решит вашу оригинальную проблему. Задайте еще один вопрос, если у вас есть другие проблемы. У вас будет плохая репутация среди сообщества, если вы этого не сделаете. – prageeth

+2

@Aniket Меняющийся вопрос полностью делает этот сайт бесполезным, потому что в новом контексте ответы на оригинальные вопросы выглядят довольно странно. Не стесняйтесь возвращать оригинальный вопрос и представлять его отдельно. –

0

Такое же исключение произойдет, если мы не укажем запись класса сопоставления <mapping class="test.hibernate.Address" /> в конфигурационном файле hibernate.

Смежные вопросы