【发布时间】:2015-10-16 09:21:14
【问题描述】:
我有 2 个域:
事件:
class Incident {
String title
String description
}
static mapping = {
tablePerHierarchy(false)
}
以及扩展 Incident 的 IncidentWithTimers:
class IncidentWithTimers extends Incident {
int currentResponseTime
Date responseTimeEndDate
}
IncidentWithTimers 不是数据库中的实际表,它是数据库视图。
现在,当我尝试从控制器获取 Incident 实例时,它会以某种方式返回 IncidentWithTimers 实例:
def index() {
Incident curIncident = Incident.get(params.incident)
println(curIncident.getClass())// "class IncidentWithTimers"
}
由于此域是一个视图,因此我通过在 IncidentWithTimers 类的 beforeInsert/Update/Delete 中抛出异常来禁用所有修改。
当我尝试修改和保存 curIncident 时,它会尝试访问 beforeUpdate(),并引发错误,而我一开始就不想更改 IncidentWithTimers。
对此我能做些什么?
【问题讨论】:
-
params.incident中的事件 ID 是否引用Incident或IncidentWithTimers的实例? -
两者都不是。 params.incident 从查询字符串中获取事件的值。 (所以 url.com/?incident=1 会返回 1)。
-
我的意思是,按照您的示例,ID 为 1 的事件是
Incident还是IncidentWithTimers?此外,IncidentWithTimers映射到的视图返回的 ID 是否来自Incident映射到的同一个表?是的,我的意思是两者应该共享相同的 ID“命名空间”。 -
你是否禁用了版本字段 version false
-
@EmmanuelRosa IncidentWithTimers 是一个数据库视图,它将事件与其他一些计算字段相结合。因此,每个事件都是一个 IncidentWithTimers。
标签: grails