2015-01-05 3 views
1

Я хочу отобразить адрес класса для сотрудника класса. То, что я делал до сих пор, приведен ниже.Hibernate - сопоставление один к одному с использованием аннотаций

Мой класс сотрудник

@Entity(name = "EMPLOYEE") 
public class Employee { 
    @Id @GeneratedValue 
    @Column(name="EMPLOYEEID", length =30) 
    int id; 
    public Employee(String string, String string2,String string3, String string4) { 
    this.name=string; 
    this.age=string2; 
    } 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    @Column(name="NAME", length = 30) 
    String name; 
    @Column(name="AGE", length = 30) 
    String age; 
    @OneToOne(mappedBy = "employee", cascade = CascadeType.ALL) 
    Address address; 
    public Address getAddress() { 
     return address; 
    } 
    public void setAddress(Address address) { 
     this.address = address; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getAge() { 
     return age; 
    } 
    public void setAge(String age) { 
     this.age = age; 
    } 

и мой адрес класса

@Entity(name="Address") 
public class Address { 
    @Id 
    @Column(name="EMPLOYEEID", length =30) 
    @GenericGenerator(name="generator", strategy="foreign", parameters = @Parameter(name="property", value="employee")) 
    @GeneratedValue(generator="generator") 
    int id; 
    @Column(name="LINE1", length=30) 
    String line1; 
    @Column(name="LINE2", length=30) 
    String line2; 
    @Column(name="LINE3", length=30) 
    String line3; 
    public String getLine1() { 
     return line1; 
    } 
    public void setLine1(String line1) { 
     this.line1 = line1; 
    } 
    public String getLine2() { 
     return line2; 
    } 
    public void setLine2(String line2) { 
     this.line2 = line2; 
    } 
    public String getLine3() { 
     return line3; 
    } 
    public void setLine3(String line3) { 
     this.line3 = line3; 
    } 
} 

Но всякий раз, когда я пытаюсь запустить его, я получаю ошибку

Неизвестный mappedBy в : com.hibernatetest.company.Employee.address, ссылка свойство неизвестно: com.hibernatetest.company.Address.employee

Что я здесь делаю неправильно?

+0

вы должны иметь ссылку на сотрудника в вашей модели домена адреса, как он ищет свойство с именем «служащий» в адресной классе. –

ответ

1

Вы ссылки несуществующие свойства Address:

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

Отъезд документы для OneToOne.mappedBy():

(Необязательно) поле, которое является владельцем отношения. Этот элемент указан только на обратной (не принадлежащей стороне) стороне ассоциации.

Таким образом, ваш код заявляет, что Address объект имеет поле employee, которому принадлежит отношения. Но у него нет такого свойства.

Вероятно, вы можете реализовать это свойство со следующим кодом (ОТКАЗ: Я не проверял, и я не»знаю, если это подходит для вашей конкретной ситуации):

@OneToOne(optional=false) 
@JoinColumn(name="EMPLOYEEID") 
Employee employee; 

public Employee getEmployee() { 
    return employee; 
} 
0

Я думаю, что ваш получают неизвестно, потому что вы дали небольшой работник письмо, которое не определяется где-либо попытаться изменить его

@OneToOne(mappedBy = "EMPLOYEE", cascade = CascadeType.ALL) here 
+0

Я попробовал. Но не повезло .. –

+0

Вы тоже изменили ниже. @Parameter (name = "property", value = "employee") – robin