私はこのシナリオを持っています:親クラスPerson、子クラス:個人と企業。私はこのクラスを次のような結合サブクラス戦略でマッピングしています:
<hibernate-mapping>
<class catalog="test" name="test.Person" table="Persons">
<id name="id" type="int">
<column name="IdPerson"/>
<generator class="increment"/>
</id>
<set inverse="true" name="addresses">
<key>
<column name="IdPerson" not-null="true"/>
</key>
<one-to-many class="test.Address"/>
</set>
<set inverse="true" name="phones">
<key>
<column name="IdPerson" not-null="true"/>
</key>
<one-to-many class="test.Phone"/>
</set>
<joined-subclass name="test.Individual" table="Individuals">
<key column="IdPerson"/>
<property name="nameIndividual" type="string">
<column length="30" name="Name" not-null="true"/>
</property>
...
</joined-subclass>
<joined-subclass name="test.Enterprise" table="Enterprises">
<key column="IdPerson"/>
<property name="nameEnterprise" type="string">
<column length="30" name="Name" not-null="true"/>
</property>
...
</joined-subclass>
</class>
<class catalog="test" name="test.Address" table="Addresses">
<composite-id class="test.AddressId" name="id">
<key-many-to-one name="person" class="test.Person">
<column name="IdPerson" not-null="true"/>
</key-many-to-one>
<key-property name="id" type="int">
<column name="IdAddress"/>
</key-property>
</composite-id>
<many-to-one name="person" class="test.Person" fetch="select" insert="false" update="false">
<column name="IdPerson" not-null="true"/>
</many-to-one>
...
</class>
<class catalog="test" name="test.Phone" table="Phones">
<composite-id class="test.PhoneId" name="id">
<key-many-to-one name="person" class="test.Person">
<column name="IdPerson" not-null="true"/>
</key-many-to-one>
<key-property name="id" type="int">
<column name="IdPhone"/>
</key-property>
</composite-id>
<many-to-one name="person" class="test.Person" fetch="select" insert="false" update="false">
<column name="IdPerson" not-null="true"/>
</many-to-one>
...
</class>
</hibernate-mapping>
この単純なHQLを使用して個人のリストをロードすると、次のようになります。
List result = session.createQuery("from Person as en").list();
hibernateはポリモーフィズムを解決し、IndividualsオブジェクトとEnterprisesオブジェクトのリストを取得します。
しかし、私が住所と電話を含めると:
List result = session.createQuery("from Person as en left join fetch en.addresses left join fetch en.phones").list();
hibernateは、IndivualクラスとEnterpriseクラスの特定のプロパティにアクセスできないPerson _ $$_javassist_5オブジェクトのリストを返します。
これは予想される動作ですか?どうすればこれを解決できますか?
前もって感謝します。
編集:
AddressクラスとPhoneクラスのマッピングを含めましたが、そのIDは複合であり、Hibernateによって生成されたjavassistプロキシの理由のようですが、プロキシがポリモーフィズムを正しく解決しないのはなぜですか?hibernateがデータベースからすべてのデータを取得する場合でも。
私のJSFページはjavax.el.PropertyNotFoundExceptionエラーをスローします:クラス'test.Person _ $$_javassist_5'にはプロパティ'nameIndividual'がありません。