![](/img/trans.png)
[英]Lazy One-to-one Optional Bidirectional Mapping using Hibernate annotations
[英]Hibernate - one to one mapping using annotations
我想将班级地址映射到班级员工,到目前为止,我所做的事情如下。
我的员工班
@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;
}
}
但是每当我尝试执行它时,我都会得到错误
未知映射于:com.hibernatetest.company.Employee.address,引用属性未知:com.hibernatetest.company.Address.employee
我在这里做错了什么?
您引用了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;
}
我认为您正在变得不知名,因为您给了小写字母的员工,该员工在尝试将其更改为
@OneToOne(mappedBy = "EMPLOYEE", cascade = CascadeType.ALL) here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.