これがシナリオです:
Hibernateでマップされた2つのクラス「Foo」と「EnhancedFoo」があります
両方のクラスが同じテーブル「foo」にマップされます
EnhancedFooはFooを拡張します
Foo.hbm.xmlには、次のような名前付きクエリ「findactivefoos」が含まれています。
from Foo foo where foo.active = true
ここで、構成をロードしようとすると、次の例外が発生します。
could not resolve property: active of: EnhancedFoo [
from EnhancedFoo foo where foo.active = true
]
EnhancedFoo.hbm.xmlにはマップされたプロパティ「active」がないため、これは正しいですが、なぜ休止状態で「Foo」が「EnhancedFoo」に置き換えられるのでしょうか。
これは私が試したことです:
次のように、マッピングファイルに「enity-name」属性を追加しようとしました。
<class name="myproject.data.entity.Foo" table="foo" entity-name="Foo">
.......
<class name="myproject.data.entity.EnhancedFoo" table="foo" entity-name="EnhancedFoo">
その後、構成は正常にロードされますが、Fooを挿入しようとすると、次のようになります。
org.hibernate.MappingException: Unknown entity: myproject.data.entity.Foo
コードの関連部分は次のとおりです。
//Foo.java
public class Foo
{
private long id;
private boolean active;
// getters and setters
}
//EnhancedFoo.java
public class EnhancedFoo extends Foo
{
private String extraProperty
// getter and setter
}
//Foo.hbm.xml
//.....
<class name="myproject.data.entity.Foo" table="foo" entity-name="Foo">
<id column="id" name="id">
<generator class="assigned"/>
</id>
<property name="active" column="active" />
</class>
<query name="find_active_foos">
<![CDATA[
from Foo foo where foo.active = true
]]>
</query>
//EnhancedFoo.hbm.xml
//.....
<class name="myproject.data.entity.EnhancedFoo" table="foo" entity-name="EnhancedFoo">
<id column="id" name="id">
<generator class="assigned"/>
</id>
</class>