我的情況是這樣的:休眠個createCriteria在接口上使N次查詢,而不是1種
我們有一個超類,「MyAbstractEntity」
@Entity
@Table(name = "MyTable")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DISCRIMINATOR", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("FOO")
public abstract class MyAbstractEntity implements Comparable<MyAbstractEntity> {
該類反過來有相當多的子類,恰似這個:
@Entity
@DiscriminatorValue("BAR")
public class MyEntity extends MyAbstractEntity implements MyInterface {
約有一半的子類實現「MyInterface」。
我有一個標準,我有興趣只從實現該接口的類中獲取對象。 當我定義我的標準是這樣的:
Criteria criteria = getSession().createCriteria(MyInterface.class)
Hibernate的轉身,併產生一個DB-呼籲接口和DB-傢伙的每個實現去堅果。我希望Hibernate能夠將其轉化爲在DISCRIMINATOR列中使用「in」子句的內容,而不是爲每個實現創建一個單獨的調用。
我試過用google搜索這個,但不幸的是我的結果被我的查詢包含「休眠」,「標準」和「接口」的事實所污染,並且我不斷碰到頁面,解釋API或演示基本的例子。
我知道我可以在「MyAbstractEntity」而不是「MyInterface」上創建條件並刪除不想要的結果,但我希望在數據庫中進行此過濾。
有沒有辦法告訴Hibernate,我希望在一個單一的數據庫調用一切?
但是,我不得不在任何時候新的子類開始實現接口的時候改變限制嗎?我們正在坐在一個巨大的代碼庫中,我們即將交付維護,我試圖避免一個解決方案,它需要他們以某種方式知道他們必須去每次新子類開始實施時更新我的限制界面。我想我可以結合你的解決方案和一些反思魔術來發現哪些子類將被包含在運行時,但是我更喜歡Hibernate是否可以爲我「處理它」。 – ivarni
這確實是一個問題。我不確定是否有神奇的Hibernate解決方案,儘管 –
這就是我所擔心的,然後我可能會考慮一些與您的解決方案相結合的思考。謝謝。 – ivarni