我面臨一個奇怪的問題,我無法找到解決方案。我試圖用MySQl數據庫中的Hibernate加載一組對象。兩種不同的對象在休眠加載
這些是我的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對象來自哪裏?
它們都映射到同一張表嗎? Class2是Class1的子類嗎?當你有實體繼承時,ID字段在所有子類中都必須是唯一的。 – Affe 2012-07-06 05:03:04
是的,它們都映射到同一張表。是的,Class2派生自Class1(Java)。有了唯一的Id字段,你的意思是我應該在java中爲ID字段使用不同的名稱? [編輯]我會自己試試:) – 2012-07-06 05:19:30
它應該只在java中定義一次,在Class1上。數據庫中的列必須是唯一的。不能有一行是Class1和一行是具有相同ID的Class2,或者您看到的查詢行爲是「正確的」。 – Affe 2012-07-06 05:31:39