簡體   English   中英

休眠單表,查詢所有行

[英]Hibernate Single Table, query for all rows

因此,我已經習慣了將Hibernate 4與Annotations一起使用一段時間了。 傳統上,我每桌都要完成1個具體的類,而且確實如此,這一直對我有用。

現在,我仍在使用Hibernate 4.3.11,並且是第一次使用Single Table Hierarchy。 我有一個主/根類,如下所示:

@Entity
@Table(name = "mytable")
@SuppressWarnings("serial")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "myobject_type", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "ABC")
public class MyEntity extends BaseEntity

因此,我想知道此類是否應該是抽象類??? 似乎並不需要。

子類的定義如下:

@Entity
@DiscriminatorValue(value = "XYZ")
public class XyzEntity extends MyEntity

我為MyEntity創建了一個DAO,並且這些方法create / update / findById的單元測試似乎都可以工作……但是“ getAllList”卻似乎不起作用。

@Override
public List<MyEntity> getAllList()
{
    List<MyEntity> myList = this.sessionFactory.getCurrentSession().createQuery("from MyEntity").list();
    return myList;
}

當我對該方法進行單元測試時,我收到一條錯誤消息。

org.hibernate.WrongClassException: Object [id=708] was not of the specified subclass [com.myapp.server.model.common.MyEntity] : Discriminator: XYZ

我應該說我在數據庫中有4條記錄。 2個記錄的“ myobject_type”字段中的值為“ XYZ”,另一個記錄的值為“ ABC”

所以,我想知道我是否應該在根類中還要省去一個DiscriminatorValue? 我使該字段“ myobject_type”不為null,因此,我將確保每個記錄的MyEntity記錄的判別器值為“ ABC”,如果創建了XyzEntity,則該值為“ XYZ”。 同樣,新的MnoEntity在該字段中的值可能為“ MNO”。

很好奇的是,在整個層次結構中,如果我有兩個MyEntity的子類,那么我在這兩個子實體中都可以有相同的字段嗎? 或者,我想我可以將類似的東西移動到一個多處的根實體中。

同樣,這是我第一次使用Hibernate中的Single Table Hierarchy,我只需要解決此錯誤消息。 非常感激任何的幫助!!! 謝謝!

湯姆

嘗試直接在查詢創建中對此值進行SQL查詢過濾,而不要使用@DiscriminatorColumn和@DiscriminatorValue進行此操作。

 List<MyEntity> myList = this.sessionFactory.getCurrentSession().createQuery("from MyEntity where myobject_type != :pattern").setParameter("pattern", pattern).list();
return myList;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM