域字段:
startDate: Date
length: Integer
perpetuity: Boolean
expiryDate: Transient (startDate + length (in years))
域方法 - 这些方法用于在大过滤器表单上进行过滤,以便用户搜索 4 种不同的过期状态。
Date getExpiryDate() {
if (this.startDate == null || this.length == null) {
return null
}
Timestamp startDate = this.startDate;
Calendar expirationDate = Calendar.getInstance()
expirationDate.setTime(startDate)
expirationDate.add(Calendar.YEAR, this.length)
return expirationDate.getTime()
}
String getMechExpiredStatus() {
String isExpiredString = 'Unspecified'
Date expDate = getExpiryDate()
if (expDate != null) {
if (expDate < new Date()) {
isExpiredString = 'Yes'
} else {
isExpiredString = 'No'
}
} else if (isPerpetual && startDate != null) {
isExpiredString = 'Perpetual'
}
return isExpiredString
}
构建结果列表
PagedResultList getMechanisms(offset, max, sortColumn, sortOrder, filters, idsOnly = false) {
def criteria = Mechanism.createCriteria()
def results = criteria.list(max: max, offset: offset) {
if (idsOnly) {
projections {
property('id')
}
}
if (filters && filters.idFilter) {
eq('id', filters.idFilter);
}
...
}
if (filters && filters.expiredFilter != null && filters.expiredFilter) {
// Do Work
// Tried getting results and removed invalid results that do not meet the
// expired filter selection
}
return results
}
我似乎找不到使用瞬态字段“expiryDate”或使用 getMechExpiredStatus 方法编写 createCriteria 的方法。
我尝试使用其他过滤器获取项目列表,然后分别删除对过期过滤器无效但 PagedResultList 没有正确更新的项目;它只返回一个当前的分页结果列表。我也找不到关于 PagedResultList 对象的太多帮助。出于某种原因,删除和添加返回一个布尔值。显然我不太了解这个对象。
如果我从初始条件列表中删除最大值和偏移量,则查询需要很长时间才能运行。
有什么想法可以做到这一点吗?