1

次のフィールドを持つデータベースエンティティPersonがあります。

  1. id
  2. 父親
  3. 母親

そして、フィールドの子を持つJPAEntityクラスを作成する必要があります。このようなもの:

@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を使用してまったく可能ですか?

4

3 に答える 3

1

非オブジェクト型に「mappedBy」を設定することはできません(双方向の関係ではないため)。ビディール関係を設定するには、Person(整数ではない)タイプの「mother」フィールドと「father」フィールドが必要です。父親と母親を取得することは簡単です

于 2012-09-19T15:16:21.700 に答える
0

それを解決するためにEJBQL(またはこの時点でJPQLですか?)を使用してみてください:

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

また、IDに整数ではないものを使用することを検討します。それは本当に長い目で見ればあなたを噛むことができます(多分longまたはBigInteger)。

于 2012-09-19T15:03:01.933 に答える
0

指摘されているマッピングの問題は別として...

JPAの専門家ではありませんが、JPAがこのケースを直接考慮しているとは思いません。2つのマッピングと補助的な偽のゲッターを使用してこれを解決します。以下のサンプル:

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

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

public getChildren() {
    if (childrenIfFather != null) return childrenIfFather();
    else return childrenIfMother();
}
于 2012-09-19T18:11:52.467 に答える