gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:29:43 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,但找不到解决方案。我正在尝试使用来自 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com