在hibernate中加载两个不同的对象

时间:2012-07-06 04:58:49

标签: java mysql hibernate

我遇到一个奇怪的问题,无法找到解决方案。我正在尝试使用MySQl db中的Hibernate在Java中加载一组对象。

这是我的hibernate映射和代码的简化版本:

<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对象 。 TWO Class2对象来自哪里?

1 个答案:

答案 0 :(得分:0)

当你在两个实体之间有继承时,Hibernate需要能够告诉特定数据库行应该代表哪个类。你可以通过在表中添加一个鉴别器类来告诉它构建哪个类来表示该行。

Class2需要使用嵌套在Class1中的<subclass/>元素声明,该元素指定使用哪个列来区分它们的值。

此处的详细信息:http://docs.jboss.org/hibernate/orm/3.5/reference/en/html/inheritance.html#inheritance-tableperclass