Java 冬眠中的独角兽-未知“;mappedBy“;
我在用hibernate锻炼,而且我在实现一对一的关系上失败了好几个小时。我读了很多关于stackoverflow的答案,并阅读了2个教程(mkyong和其他一些人),但我不明白我做错了什么 我尝试了很多方法,但最终总是出现相同的异常(Java 冬眠中的独角兽-未知“;mappedBy“;,java,hibernate,hibernate-mapping,one-to-one,Java,Hibernate,Hibernate Mapping,One To One,我在用hibernate锻炼,而且我在实现一对一的关系上失败了好几个小时。我读了很多关于stackoverflow的答案,并阅读了2个教程(mkyong和其他一些人),但我不明白我做错了什么 我尝试了很多方法,但最终总是出现相同的异常(org.hibernate.AnnotationException:Unknown mappedBy in:ch.myapp.model.Employee.office,引用的属性Unknown:ch.myapp.model.office.EMPLOYEES) 如
org.hibernate.AnnotationException:Unknown mappedBy in:ch.myapp.model.Employee.office,引用的属性Unknown:ch.myapp.model.office.EMPLOYEES
)
如果有人能告诉我问题出在哪里,我会非常高兴
我正在使用并尝试在办公室和员工之间实现1:1(我知道这没有多大意义)
Employee.class
@Entity
@Table(name = "EMPLOYEES")
public class Employee {
@Id
@GeneratedValue
@Column(name = "EMPLOYEENUMBER")
private Integer employeeNumber;
@Column(name = "FIRSTNAME")
private String firstName;
@Column(name = "LASTNAME")
private String lastName;
@Column(name = "EXTENSION")
private String extension;
@Column(name = "EMAIL")
private String email;
@Column(name = "JOBTITLE")
private String jobTitle;
@Column(name = "OFFICECODE")
private String officeCode;
// ACHTUNG, Test "EmployeeDataAccesTest -> loadEmployee()" greift auf einen
// Null-Wert zurück. Null kann keinem primitiven Wert zugeordnet werden.
@Column(name = "REPORTSTO")
private Integer reportsto;
@OneToOne(mappedBy = "EMPLOYEES", fetch = FetchType.EAGER)
private Office office;
//Getters and setters without annotations...
}
@Entity
@Table(name = "OFFICES")
public class Office {
@Id
@Column(name = "OFFICECODE")
private String officeCode;
@Column(name = "CITY")
private String city;
@Column(name = "PHONE")
private String phone;
@Column(name = "ADDRESSLINE1")
private String addressLine1;
@Column(name = "ADDRESSLINE2")
private String addressLine2;
@Column(name = "STATE")
private String state;
@Column(name = "COUNTRY")
private String country;
@Column(name = "POSTALCODE")
private String postalCode;
@Column(name = "TERRITORY")
private String territory;
@OneToOne
@JoinColumn(name = "OFFICECODE")
private Employee employee;
//Getters and setters without annotations...
}
Office.class
@Entity
@Table(name = "EMPLOYEES")
public class Employee {
@Id
@GeneratedValue
@Column(name = "EMPLOYEENUMBER")
private Integer employeeNumber;
@Column(name = "FIRSTNAME")
private String firstName;
@Column(name = "LASTNAME")
private String lastName;
@Column(name = "EXTENSION")
private String extension;
@Column(name = "EMAIL")
private String email;
@Column(name = "JOBTITLE")
private String jobTitle;
@Column(name = "OFFICECODE")
private String officeCode;
// ACHTUNG, Test "EmployeeDataAccesTest -> loadEmployee()" greift auf einen
// Null-Wert zurück. Null kann keinem primitiven Wert zugeordnet werden.
@Column(name = "REPORTSTO")
private Integer reportsto;
@OneToOne(mappedBy = "EMPLOYEES", fetch = FetchType.EAGER)
private Office office;
//Getters and setters without annotations...
}
@Entity
@Table(name = "OFFICES")
public class Office {
@Id
@Column(name = "OFFICECODE")
private String officeCode;
@Column(name = "CITY")
private String city;
@Column(name = "PHONE")
private String phone;
@Column(name = "ADDRESSLINE1")
private String addressLine1;
@Column(name = "ADDRESSLINE2")
private String addressLine2;
@Column(name = "STATE")
private String state;
@Column(name = "COUNTRY")
private String country;
@Column(name = "POSTALCODE")
private String postalCode;
@Column(name = "TERRITORY")
private String territory;
@OneToOne
@JoinColumn(name = "OFFICECODE")
private Employee employee;
//Getters and setters without annotations...
}
Hibernate.cfg.xml:
Employee.class中的mappedBy值错误,应为以下值:
@OneToOne(mappedBy = "employee", fetch = FetchType.EAGER)
private Office office;
1.确保属性如下所示:
@OneToOne(mappedBy = "employee", fetch = FetchType.EAGER)
private Office office;
@OneToOne(mappedBy = "employee", fetch = FetchType.EAGER)
private Office office;
公共办公室getOffice(){
返回办公室;
}
mappedBy注释指的是属性名,而不是列名。另外,由于属性是私有的,hibernate通过它们的getter/setter访问它们,因此您需要它遵循约定(get、Camel Case等)mappedBy的值必须与引用类(包括其大小写)中的属性名称相同 比如说, 如果属性的名称为
employee
,则必须准确地编写employee
如果属性的名称为employeE
,则必须准确地编写employeE
(getter函数的名称是否正确)检查两个实体是否都在
persistence.xml
是否检查包名是否为“ch.myapp.model.Employee”@srikanthr-Uhm,包名为“ch.myapp.model”。嗯,我想知道这是否是问题所在。@TrudleR than用弹出的错误编辑你的问题-他是正确的,应该可以。另外,粘贴用于这两个相关属性的getter。两次映射“OFFICECODE”可能有些可疑,一次作为Id,一次不作为Id,但这是另一回事