我繼承了我需要維護的Grails 1.3.9項目。grails GORM:如何訪問超級類的ID
有一種情況需要對其中一個控制器進行擴展以記錄擴展約會的創建。
的約會的定義是這樣的:
class Appointment implements Serializable{
static mapping = {
table 'appointment'
version false
tablePerHierarchy false
id generator:'sequence', params:[sequence:'seq_te_id']
cache true
columns{
id column:'te_id'
start column: 'te_start'
// Other columns follow
}
}
}
特別約定:
class SpecialAppointment extends Appointment implements Serializable {
static mapping = {
table 'special_appointment'
cache true
columns{
id column: 'pt_id'
comment column: 'pt_name'
// other columns
}
}
}
歷史日誌:
class AppointmentHistory {
static mapping = {
version false
table 'appointment_history'
id generator: 'sequence', params:[sequence:'seq_th_id']
cache true
columns {
id column: 'th_id'
termin column: 'pt_id'
// other columns
}
}
}
在控制器創建SpecialAppointment,其任命爲基類,我需要創建並保存AppointmentHistory的新實例,其中哈與約會的關係。
def app = new SpecialAppointment()
// set fields here
app.save(flush:true)
// save history log
def history = new AppointmentHistory(appointment: app)
我創造歷史對象時,通過實例SpecialAppointment的,但它是錯誤的,因爲它使用的ID,而不是任命的ID。
不幸的是,我無法弄清楚正確的語法從剛纔保存的派生類實例中訪問超類的成員。
請指教。
這聽起來對我來說應該是一個組合而不是擴展 - SpecialAppointment不應該是Appointment的子類,而應該是一個單獨的類,它擁有一個Appointment的引用(可能不可空)。 –
是的,以這種方式實現它可能會更好,但是這是更大應用程序的一部分,我寧願不更改這些關係。 顯式訪問超類的成員的正確語法是什麼? – matejk