雖然在行動(克里斯蒂娜·鮑爾&是Gavin King)讀取休眠我碰到下面的部分排在第7章Hibernate的多態查詢
7.2.3多態查詢 我們描述HQL作爲一種面向對象的查詢語言,所以應該支持多態查詢 - 即分別查詢類的實例和其子類的所有實例。你已經知道足夠多的HQL,我們可以證明這一點。考慮以下查詢:
從BillingDetails
該查詢返回的類型BillingDetails,它是一個抽象類的對象。因此,在這種情況下,具體對象屬於BillingDetails的子類型:CreditCard和BankAccount。如果我們只想要一個特定的子類的實例,我們可以使用
從信用卡式
在FROM子句中命名的類並不需要是一個映射持久化類;任何班級都會這樣做。下面的查詢返回所有的持久化對象:從java.io.Serializable接口
:
從java.lang.Object繼承當然
,這也適用於接口,該查詢返回所有序列化的持久對象
標準查詢也支持多態:
session.createCriteria(BillingDetails.class).list();
該查詢返回BillingDetails及其子類的實例。同樣,以下條件查詢返回所有持久對象:
session.createCriteria(java.lang.Object.class).list();
多態性不僅適用於在from子句中明確命名的類,而且也適用於多態關聯,如稍後將看到的。
問題:多態查詢有什麼用處。如何以及何時使用。
從您發佈的內容來看,這不是很明顯嗎?假設您需要所有賬單細節(不論其類型是什麼)(信用卡或銀行賬戶):您無需爲每個具體子類發出一個w-query:選擇BillingDetails的單個查詢就足夠了。 –