[英]jpa hibernate, is it possible to list all rows of a table withouth specify a query?
[英]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.