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