Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails GORM中使用映射所有者的派生字段';s场_Grails_Gorm - Fatal编程技术网

Grails GORM中使用映射所有者的派生字段';s场

Grails GORM中使用映射所有者的派生字段';s场,grails,gorm,Grails,Gorm,我试图弄清楚如何在我的域类中生成一个派生的布尔字段。布尔字段是通过与映射所有者的值进行比较得到的。这在GORM中可能吗?我尝试了很多不同的方法,并且不断地出现各种SQL错误。我的域类如下: class Reading { float readingValue Date dateCreated boolean alarmedState static constraints = { readingValue(nullable: false)

我试图弄清楚如何在我的域类中生成一个派生的布尔字段。布尔字段是通过与映射所有者的值进行比较得到的。这在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)
    }
}
课堂阅读{
浮点读取值
创建日期
布尔报警状态
静态约束={
readingValue(可为空:false)
}  
静态belongsTo=[传感器:传感器]
静态映射={
自动时间戳为真
排序“dateCreated”
alarmedState公式:“(读取值<传感器。如果小于,则报警);(读取值>传感器。如果大于,则报警)”
}
}
类传感器{
字符串描述
字符串位置
传感器类型类型枚举
双重警报
双重警报
静态hasMany=[读数:读数]
静态约束={
alarmIfGreater(可为空:真)
无报警(可为空:真)
说明(空白:假)
位置(空白:false)
typeEnum(空白:false)
}
}
该属性可能会执行您想要的操作。例如

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 )
    }
}
课堂阅读{
浮点读取值
创建日期
静态约束={
readingValue(可为空:false)
}  
静态belongsTo=[传感器:传感器]
静态瞬态=['alarmedState']
静态映射={
自动时间戳为真
排序“dateCreated”
//alarmedState公式:“(读取值<传感器。如果小于,则报警);(读取值>传感器。如果大于,则报警)”
}
布尔getAlarmedState(){
(readingValuesensor.AlarmiFleer)
}
}

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

我尝试过这段代码。不幸的是,您似乎无法通过瞬态进行查询。请参阅您是否尝试将公式更改为使用传统SQL,并使用select和where子句?没错,
formula
必须是有效的、特定于后端的SQL。如果启用SQL日志记录,您将看到正在构造何种查询。