1

我面临一个奇怪的问题,无法找到解决方案。我正在尝试使用来自 MySQl db 的 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 个) -两个 Class1 对象和两个 Class2 对象。两个 Class2 对象来自哪里?

4

1 回答 1

0

当你在两个实体之间有继承时,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 回答