1

私は奇妙な問題に直面していて、解決策を見つけることができません。MySQlデータベースからHibernateを使用してJavaでオブジェクトのセットをロードしようとしています。

これらは私の休止状態のマッピングとコードの簡略化されたバージョンです:

<class name="org.Foo.Class1" table="class_profile" >
    <cache usage="read-write"/>
            <id name="id" column="id">
                <generator class="native"/>
            </id>
       <property name="amount" column="amount"/>
</class>
<class name="org.Foo.Class2" table="class_profile" >
    <cache usage="read-write"/>
            <id name="id" column="id">
                <generator class="native"/>
            </id>
       <property name="amount" column="amount"/>
</class>

これは、オブジェクトにアクセスするための私のコードです。

public List<Class1> loadProfiles(final List<Integer> pIds)
{
  return (List<Class1>)getHibernateTemplate().executeFind(new HibernateCallback() {
     public Object doInHibernate(Session session) throws HibernateException {
    return session.createQuery("from Class1 il where il.id in (:idList)")
        .setParameterList("idList", pIds)
        .list();
    }
  });
}

さて、コードを実行すると

List<Class1> profiles = fooService.loadProfiles(Arrays.asList(3,4));

リストプロファイルに(2つではなく)4つのオブジェクト (2つのClass1オブジェクトと2つのClass2オブジェクト)があります。2つのClass2オブジェクトはどこから来ていますか?

4

1 に答える 1

0

2 つのエンティティ間に継承がある場合、Hibernate は、特定のデータベース行がどのクラスを表すことになっているかを認識できる必要があります。これを行うには、行を表すためにどのクラスを作成するかを示す識別クラスをテーブルに追加します。

Class2 は、Class1 内にネストされた要素を使用して宣言する必要があります<subclass/>。これは、それらを区別するために使用される列の値を指定します。

詳細はこちら: http://docs.jboss.org/hibernate/orm/3.5/reference/en/html/inheritance.html#inheritance-tableperclass

于 2012-07-06T05:45:44.367 に答える