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

标签 java mysql hibernate

我遇到了一个奇怪的问题,但找不到解决方案。我正在尝试使用来自 MySQl 数据库的 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 对象.这两个 Class2 对象来自哪里?

最佳答案

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

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

详细信息在这里:http://docs.jboss.org/hibernate/orm/3.5/reference/en/html/inheritance.html#inheritance-tableperclass

关于java - 两个不同的对象在 hibernate 中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11356073/

相关文章:

mysql - MySQL UPDATE 语法有什么问题?

java - 简单更新已锁定

java - SQL 查询执行时间比使用 Hibernate SQL Query 的预期时间长

java - 在可见时返回 WebElement

mysql - 如何使用mysql "IFNULL"

mysql - 如果相关数据保存在单独的表中,搜索速度会提高吗?

hibernate - Tomcat + OSGi + Hibernate + maven ClassNotFoundException org.hibernate.ServiceRegistry

java - Ehcache 与静态 map 缓存实现

java - 纯文本的 Spring Boot 内容 header

java - "& 0xFF"和 ">>>"移位有什么作用?