2015-10-16 80 views
0

我有兩個域:如何獲取類的實例而不是其子類?

事件:

class Incident { 
    String title 
    String description 
} 

static mapping = { 
    tablePerHierarchy(false) 
} 

而且IncidentWithTimers延伸事件:

class IncidentWithTimers extends Incident { 
    int currentResponseTime 
    Date responseTimeEndDate 
} 

IncidentWithTimers是不是在數據庫中實際的表,這是一個數據庫視圖。由於該領域是一個看法,我通過在beforeInsert/Update拋出異常禁用所有修改

def index() { 
    Incident curIncident = Incident.get(params.incident) 
    println(curIncident.getClass())// "class IncidentWithTimers" 
} 

現在,當我嘗試從一個控制器獲得一個事件實例,它在某種程度上返回IncidentWithTimers實例/ Delete,在IncidentWithTimers類中。

當我嘗試修改並保存curIncident時,它嘗試訪問beforeUpdate(),並引發錯誤,而我從來不想首先更改IncidentWithTimers

我該怎麼辦?

+0

'params.incident'中的事件ID是指'Incident'還是IncidentWithTimers'的實例? –

+0

都不是。 params.incident從查詢字符串中獲取事件的值。 (所以url.com/?incident=1會返回1)。 – Ivar

+0

我的意思是,按照你的例子,ID 1是事件或IncidentWithTimers的事件?另外,「IncidentWithTimers」被映射爲來自「事件」映射到的同一個表的視圖返回的ID是什麼?是的,我暗示兩者應共享相同的ID「名稱空間」。 –

回答

1

問題是該視圖包含每個Incident,而不是子類的子集。如您所說,每個IncidentWithTimers是一個Incident

解決方案是使用查詢而不是子類,或者使得一個獨立的重複類而不是子類。

我認爲前者是最好的選擇,因爲意圖是明確的。