我有一个工作正常的域类。但现在我添加了一个Long
属性,它从那里向南走。
这是Accident域类定义:
class Accident {
String fullDescription
Date dateFrom
Date dateTo
Long lastUpdated
Address address
GpsPosition gpsPosition
String providerDescription
String link
static constraints = {
address nullable: true
gpsPosition nullable: true
providerDescription nullable: true
link nullable: true
fullDescription maxSize: 1024
lastUpdated nullable: true
}
}
这就是我收到错误的地方:
@Transactional
class DatabaseCleanupService {
static final long timeNotUpdatedToDelete = 1 * 1000 // milliseconds
void cleanupDatabase() {
Accident accident
Accident.each {
/*ERROR AT THIS LINE*/ if (System.currentTimeMillis() - it.lastUpdated > timeNotUpdatedToDelete) {
// do stuff
}
}
}
我可以从代码的其他部分访问该属性,我成功打印调试信息,但此时,它只是崩溃。这有什么问题?
编辑:错误消息显示:
没有此类属性:lastUpdated
用于类:com.quarky.nehodyprahaserver.Accident
可能的解决方案:lastUpdated
答案 0 :(得分:1)
您需要先获取一份事故清单,然后更改:
Accident.each {
到
Accident.list().each {
应该修理它: - )
答案 1 :(得分:0)
根据数据库中有多少Accident
个实例,在数据库级别按日期进行过滤可能效率更高,而不是每次都将整个表提取到Groovy对象中并过滤后组织:
import groovy.time.TimeCategory
@Transactional
class DatabaseCleanupService {
static final long timeNotUpdatedToDelete = 1 * 1000 // milliseconds
void cleanupDatabase() {
use(TimeCategory) {
Accident.findAllByLastUpdatedLessThan(
timeNotUpdatedToDelete.milliseconds.ago).each {
// do stuff
}
}
}
}
(或者只是将常量内联为1.second.ago
- 当你把它读作英文“上次更新不到一秒钟”时,这看起来很错误,但这是正确的,因为LessThan
的意思是“早于”当应用于Date
个对象时)