我有Request
,RequestSet
(單個用戶同時提交的各個請求的集合)和請求Status
的域類。我想彙總請求的狀態,以便請求集具有根據其各個請求的狀態確定的狀態。可能使用Grails派生屬性來檢索域對象嗎?
這些域類的相關部分如下所示:
class RequestSet {
Long id
static hasMany = [requests: Request]
}
class Request {
Long id
Status status
}
class Status {
Long id
String status
}
我嘗試添加派生status
屬性爲RequestSet
類,像這樣:
class RequestSet {
Long id
Status status
static hasMany = [requests: Request]
static transients = ['status']
static mapping = {
status formula: '(SELECT MIN(status_id) FROM (SELECT status_id FROM request rq WHERE rq.request_set_id = id))'
}
}
當我運行我的應用程序和檢查requestSet對象的屬性,但是,狀態都是空的。
我試圖完成甚至可能使用派生屬性?我可以使用getter來解決瞬態屬性問題,但我希望能夠使用動態查找器根據其冒泡狀態來檢索requestSets。我所見過的所有例子都使用公式的結果。我想知道如果我能以某種方式讓Grails將該返回值解釋爲Status
類的ID。
編輯,2016年12月7日:請注意,我將衍生status
屬性標記爲瞬態。如果不這樣做,我會從Hibernate獲得ClassCastException
。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'transactionManager_companion' while setting constructor argument with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager_companion': Cannot resolve reference to bean 'sessionFactory_companion' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory_companion': Invocation of init method failed; nested exception is java.lang.ClassCastException: org.hibernate.mapping.Formula cannot be cast to org.hibernate.mapping.Column
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
我懷疑即使公式的作品,因爲它被標記爲瞬態我將無法使用動態查找與此屬性。我會解決使用公式來計算身份的身份證,但我仍然有問題。
現在我的領域類看起來是這樣的:
class RequestSet {
Long id
Long statusId
static hasMany = [requests: Request]
static mapping = {
statusId formula: '(SELECT MIN(status_id) FROM (SELECT rq.status_id FROM request rq WHERE rq.request_set_id = id))'
}
}
獲取請求集時由下式生成的SQL是
(SELECT MIN(this_.status_id) FROM (SELECT rq.status_id FROM request rq WHERE rq.request_set_id = this_.id)) as formula3_0_ from request_set
,我得到一個SQLSyntaxErrorException
:ORA-00904: "THIS_"."STATUS_ID": invalid identifier
。我怎樣才能重寫公式,使'this_。'是不是預先給status_id?