1

私はHinbernateを学習している最中なので、2つのクラスを1つのDBテーブルにマップできるかどうかという考えが通過しました。

元 :

Class Developer {
    String name;
}

Class Manager {
    String name;
}

これらのクラスは両方とも1つのテーブルにマップされますが、たとえば、Stringデータ型の1つの列を持つEmployeeという名前で言います。

Hibernateは、作成に使用しているクラスに基づいてテーブルに行を作成できますか?それとも、クラスを区別するための識別列があるべきだと思いますか?

注:クラス間に継承関係はありません。クラスは分離されています。

4

2 に答える 2

1

xmlマッピングファイルを使用する場合、2つのマッピングファイルDeveloper.hbm.xmlとManager.hbm.xmlを作成するだけで、どちらも同じデータベーステーブルを参照します。それはうまくいきます。

問題は、テーブル行が開発者またはマネージャーとしてのみロードされ、両方としてロードされないようにする必要があることです。たとえば、とを使用してそれらをロードするとsession.createQuery("from Developer")session.createQuery("from Manager")セッションキャッシュに同じ行が2回あります。次に、最初にDeveloperを変更および更新し、その後Managerで同じ行を変更および更新すると、Developerでの変更が失われ、セッションキャッシュに一貫性がなくなります。

したがって、弁別子行は絶対に必要というわけではありませんが、強くお勧めします。

于 2012-05-22T09:04:55.733 に答える
0

さて、オブジェクトモデルではなく、データベーススキーマの観点から考えてください。テーブルから単一のレコードが与えられた場合、(それがあなたであるかHibernateであるかに関係なく)誰もが実際にどのエンティティであるかをどのように知ることができますか?

クラス階層を導入し、識別子列を追加してSINGLE_TABLE継承を使用してタイプを指定するか、それらのエンティティを別のテーブルにマップする必要があります。

于 2012-05-22T08:56:30.730 に答える