如何获取类的实例而不是其子类?

时间:2015-10-16 09:21:14

标签: grails

我有2个域名:

事件:

class Incident {
    String title
    String description
}

static mapping = {
    tablePerHierarchy(false)
}

和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

我该怎么办?

1 个答案:

答案 0 :(得分:1)

问题是视图包含每个Incident,而不是子类中发生的子集。正如您所说,IncidentWithTimersIncident都是IncidentWithTimers

解决方案是使用查询而不是子类,或使from("rabbitmq://localhost/A?routingKey=B&exchangeType=topic") 成为独立的重复类而不是子类。

我认为前者是最佳选择,因为意图很明确。