GORM中的派生字段利用映射所有者的字段

时间:2014-02-07 03:37:21

标签: grails gorm

我正在试图弄清楚如何在我的域类中创建一个派生的布尔字段。布尔字段是从与映射所有者的值进行比较得出的。这在GORM中是否可行?我尝试了很多不同的方法,我不断收到各种SQL错误。我的域名类别如下:

class Reading {
    float readingValue
    Date dateCreated
    boolean alarmedState

    static constraints = {
        readingValue(nullable: false)
    }  

    static belongsTo = [sensor : Sensor]

    static mapping = {
        autoTimestamp true
        sort "dateCreated"
        alarmedState formula: "(READING_VALUE < SENSOR.ALARM_IF_LESS) || (READING_VALUE > SENSOR.ALARM_IF_GREATER)"
    }

}

class Sensor {

    String description
    String location
    SensorType typeEnum
    double alarmIfGreater
    double alarmIfLess

    static hasMany = [readings : Reading]
    static constraints = {
        alarmIfGreater(nullable: true)
        alarmIfLess(nullable: true)
        description(blank: false)
        location(blank: false)
        typeEnum(blank: false)
    }
}

1 个答案:

答案 0 :(得分:0)

transients属性可能会执行您想要的操作。例如。

class Reading {
    float readingValue
    Date dateCreated

    static constraints = {
        readingValue(nullable: false)
    }  

    static belongsTo = [sensor : Sensor]
    static transients = ['alarmedState']

    static mapping = {
        autoTimestamp true
        sort "dateCreated"
        //alarmedState formula: "(READING_VALUE < SENSOR.ALARM_IF_LESS) || (READING_VALUE > SENSOR.ALARM_IF_GREATER)"
    }

    Boolean getAlarmedState() {
        ( readingValue < sensor.alarmIfLess || readingValue > sensor.alarmIfGreater )
    }
}

我没有测试过这段代码,但它可能会让你走上正确的轨道......