2

私は3つのクラスを持っています:

Person {
    int id;
    String name;
    String lastName;
}

Employee extends Person {
    //some additional data
}

Owner extends Person {
    //some additional data
}

クラスごとに別のテーブルがあります。テーブルでは、キーはEmployeeテーブルとまったく同じである必要がありPersonます。

そして今、クラスを挿入すると、テーブルに1つのレコードがあり、同じEmployeeレコードが1つあるはずです(これが値1であると仮定しましょう)。PersonEmployeeID

その後、Owner クラスを挿入したいのですが、同じ Person (ID=1) にしたいので、Owner を挿入した後、テーブル Owner には 1 つのレコードのみを追加する必要がありますが、テーブル Person のレコードはそのままにしておく必要があります。

私はこれを試しました:http://viralpatel.net/blogs/hibernate-inheritance-table-per-subclass-annotation-xml-mapping/

最初のクラスを挿入しても問題ありません。別の ID で 2 番目を挿入しても問題ありません。db からオブジェクトを取得しても問題ありませんが、hibernateException を取得した既存の人物など、同じ ID を持つ所有者クラスを追加したいのですが...誰か助けてくれますか?

4

2 に答える 2

0

「それは明らかに不可能です。」私のコード例では、従業員はプロファイルを拡張し、所有者はプロファイルを拡張します。

私があなたの答えを正しく理解しているなら、あなたは次のようなことを提案します:

Person{
Employee emp;
Owner owner;
}

私の最初のクラス階層では、次のことができました。

Person getPersonFromDb( Class class, int id){  ...  session.get(class, id) ... }

Owner o = (Owner) getPersonFromDb(Owner.class, id);
Employee e =(Employee) getPersonFromDb(Employee.class, id);

あなたのアプローチでは、私はこのようなものを持つことはできません...

于 2012-12-06T21:14:27.733 に答える
0

それは明らかに不可能です。Java には単一の継承しかないため、オブジェクトが従業員と所有者の両方になることはできません。これらの関連付けをマッピングするために継承を使用しないでください。

代わりに、Person にその Employee ロールとの OnetoOne 関連付け、およびその Owner ロールとの OnetoOne 関連付けを持たせる必要があります。

于 2012-12-06T20:51:23.863 に答える