引用的 AnnotationException 属性 不是 (One|Many)ToOne

AnnotationException Referenced property not a (One|Many)ToOne

我试图建立一对一的关系。但我收到错误:

AnnotationException Referenced property not a (One|Many)ToOne
on
com.student.information.service.Department.departmentId in mappedBy of com.student.information.service.DepartmentHead.department

两个实体几乎相同。部门可以没有部门负责人。

Department.Java

@Entity
@Table(name="department", catalog="student")
public class Department {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer departmentId;

    @Column(name="dept_name")
    private String departmentName;

    @OneToMany(mappedBy="department",cascade = CascadeType.ALL)
    private List<Student> student; 

    @OneToOne(targetEntity=Department.class)
    private DepartmentHead departmenthead;
}       

DepartmentHead.java

@Entity
@Table(name="departmenthead", catalog = "student")
public class DepartmentHead {

    //This is mapped with the department id

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    @Column(name="headname")
    private String headName;

    @OneToOne(mappedBy = "departmentId",fetch = FetchType.LAZY,cascade=CascadeType.ALL)
    @JoinColumn(name="dept_id")
    private Department department;  
}

原因:org.hibernate.AnnotationException:引用的 属性 不是 (One|Many)ToOne:

有人可以指出我犯了什么错误的正确方向吗?过去 2 天我一直在苦苦挣扎,无法找出问题的解决方案。在此先感谢您的帮助。

学生class怎么样。您是否在 Student class.

中定义了 ManyToOne 关系
    @Entity
    public class Student {
      @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
      private int id;
      private String name;

      @ManyToOne
     private Department department;
     ..................

请检查this example

您的映射设置不正确。 Hibernate 抱怨没有名为 departmentId 的字段可用于建立一对一或多对关系,这是正确的。

您想像这样映射您的价值观。

Department.Java

@Entity
@Table(name="department", catalog="student")
public class Department {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer departmentId;

    @OneToOne
    @JoinColumn(name = "id")
    private DepartmentHead departmenthead;
}       

DepartmentHead.java

@Entity
@Table(name="departmenthead", catalog = "student")
public class DepartmentHead {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    @OneToOne(mappedBy = "departmenthead")
    private Department department;  
}

您将 DepartmentHead 中的 Department 字段指向 Department 中的 DepartmentHead 字段。 Hibernate 整理出要使用的 ID,您不必在实际 link.

中指定它