hibernate - Grails createCriteria 并使用 Transient 字段和 PagedResultsList

标签 hibernate grails transient createcriteria

域字段:

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

}

我似乎找不到使用 transient 字段“expiryDate”或使用 getMechExpiredStatus 方法来编写 createCriteria 的方法。

我尝试使用其他过滤器获取项目列表,然后单独删除对过期过滤器无效的项目,但 PagedResultList 未正确更新;它只返回当前分页结果列表。我也找不到有关 PagedResultList 对象的太多帮助。由于某种原因,删除和添加返回 bool 值。显然我不太了解这个物体。

如果我从初始条件列表中删除最大值和偏移量,查询将需要非常很长的时间来运行。

有什么想法可以实现这一点吗?

最佳答案

我通过在 View 中设置过期状态和日期并将其链接到域对象来解决这个问题。效果很好!

关于hibernate - Grails createCriteria 并使用 Transient 字段和 PagedResultsList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25436734/

相关文章:

java - 是什么导致 Spring Boot 故障安全清理(集合)发生

java - Hibernate 数据库连接自动限定用户名不正确

grails - 如何从Grails Controller 重定向到相对URL

ios - NSFetchedResultsController transient 属性上的 NSSortDescriptor

Java transient 变量类型必须知道序列化?

java - hibernate一对多将子对象与父关系分离

java - Hibernate 无法解析列

grails - <g:checkBox>单击调用 Controller 功能

grails - 调用 lock() 后如何解锁域对象?

java - 为什么ArrayList要实现序列化?