Java 冬眠中的独角兽-未知“;mappedBy“;

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) 如

我在用hibernate锻炼,而且我在实现一对一的关系上失败了好几个小时。我读了很多关于stackoverflow的答案,并阅读了2个教程(mkyong和其他一些人),但我不明白我做错了什么

我尝试了很多方法,但最终总是出现相同的异常(
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;
  • 确保getter如下所示:

    @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,但这是另一回事