JPA OneToOne和OneToMany在同一个实体上

时间:2012-10-21 14:33:38

标签: java jpa playframework

  

可能重复:
  JPA OneToOne and ManyToMany between two entities

我找到了无效的解决方案。我的问题是 我有两个实体“员工”和“部门” 许多员工属于一个部门 One Department由One Employee领导。 随时都会出现错误,同时引入@OneToOne和@OneToMany。 这是代码

public class Department {
@Required
public String deptName; 

@OneToMany(mappedBy="dept")
public List<Employee> employees = new ArrayList<Employee>();

@OneToOne
public Employee deptHead = new Employee();

    .....   

}

public class Employee{
@Required
public String surname;

@Required
public String othernames;   

@OneToOne(mappedBy="depthead")
public Department headedBy = new Department();

@ManyToOne
public Department dept = new Department();

... 
}

是否可以同时使用aNnotation和工作?

1 个答案:

答案 0 :(得分:0)

应该是。

  1. 当您创建或要求JPA创建Employee的实例时,Employee会尝试实例化Department,实例化Employee。 ..,无限。

    从类定义中删除= new Employee()和= new Department()表达式;使用适当的setter方法。

  2. 验证Department表上定义了一对一关系的SQL列是否已定义;具体而言,Department表具有引用Employee的外键。这样做的基础是@OneToOne(mappedBy="...")应该在JPA实体上定义具有SQL外键,引用所做的实体


  3. 除此之外,

    之间存在问题
    @OneToOne(mappedBy="depthead")
    public Department headedBy = new Department();
    

    以及Department上的相应字段:

    @OneToOne
    public Employee deptHead = new Employee();
    

    deptheaddeptHead之间的情况不匹配。