【发布时间】:2012-05-23 17:18:14
【问题描述】:
这是场景:
-
我有 2 个使用 hibernate 映射的类:“Foo”和“EnhancedFoo”
-
两个类都映射到同一个表“foo”
-
EnhancedFoo 扩展了 Foo
-
Foo.hbm.xml 包含一个命名查询“find active foos”,如下所示:
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”,但是为什么 hibernate 将“Foo”替换为“EnhancedFoo”?
这是我尝试过的:
尝试在映射文件上添加“实体名称”属性,如下所示:
<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>
【问题讨论】:
-
在同一张表上映射两个实体没有多大意义。你为什么要这样做?
-
抱歉耽搁了,实际上 Foo 它是一个巨大的单片机类,团队不再接触什么,所以我们尝试映射第二个类,只是为了坚持因为实例化 Foo 在其构造函数中做了很多幕后工作 =(
标签: hibernate named-query