JPA类有野外孩子的人

时间:2012-09-19 14:40:01

标签: jpa jpa-2.0

我有一个数据库实体Person,包含以下字段:

  1. id
  2. 父亲
  3. 我需要使用field children创建JPA Entity类。 像这样:

    @Entity
    public class Person implements Serializable {
        private static final long serialVersionUID = 1L;
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;
    
        @Column(name = "father")
        private Integer fatherID;
    
        @Column(name = "mother")
        private Integer motherID;
    
        @OneToMany(mappedBy = "fatherId")
        private List<Person> children;
        }
    

    但问题是我需要在mappedBy属性中确定母亲。结果可能如下:

    SELECT * FROM person WHERE father = id OR mother = id
    

    有人可以帮我解决这个问题吗?这个任务是否可以使用JPA?

3 个答案:

答案 0 :(得分:1)

您不能将“mappedBy”设置为非对象类型(因为它不是双向关系)。您必须具有Person(非整数)类型的“mother”和“father”字段才能具有bidir关系。让父亲和母亲变得微不足道

答案 1 :(得分:0)

尝试使用EJBQL(或者此时是JPQL吗?)来解决它:

  SELECT p FROM Person p WHERE p.father = ?1 OR p.mother = ?2

另外,我会考虑使用不是id的整数。从长远来看,它可能真的会让你感到困扰(也许是一个长期或BigInteger)。

答案 2 :(得分:0)

除了已经指出的映射问题......

不是JPA专家,但我不认为JPA直接考虑此案例。我会用两个映射和一个辅助的假吸气器来解决这个问题。以下示例:

@OneToMany(mappedBy = "father")
private List<Person> childrenIfFather();

@OneToMany(mappedBy = "mother")
private List<Person> childrenIfMother();

public getChildren() {
    if (childrenIfFather != null) return childrenIfFather();
    else return childrenIfMother();
}