我有一个数据库实体Person,包含以下字段:
我需要使用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?
答案 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();
}