将列求和值与另一列进行比较 - Criteria grails

时间:2018-02-20 14:19:08

标签: grails gorm

我尝试做类似低但不正确的

    def results = Transportadora.createCriteria().list(max: params.max, offset: params.offset ?: 0) {
        or {
            lt('validadeRange', reminderDate)
            gtProperty('atualRange + 1000','fimRange')
        }
        ilike('tipo','Correios') 
        if (params['filter']) {
            or {
                ilike("firstName", "%${params.filter}%")
                ilike("lastName", "%${params.filter}%")
            }
        }
        if (params.order) {
            order(params.sort, params.order)
        }
    }

我需要做什么才能获得' atualRange' (当前范围)列加起来为1000并比较它是否大于' fimRange' (范围结束)。

gtProperty('atualRange + 1000','fimRange')

但我在我的域名中遇到了另一个问题:' atualRange'是旋转为String

class Transportadora{

    String nome
    String codigo
    String tipo
    String via
    Float limPesoVolume //limite de peso por volume
    Float limDimVolume  //limite de dimensões por volume
    Float altLim //Altura limite
    Float largLim //Largura limite
    Float profLim //Profundidade limite

    //static hasMany = [tiposEmbalagem: TipoEmbalagem]

    static constraints = {
        codigo(blank: false, unique: "tenantId")
        nome(blank: false)
        tipo(nullable:true, inList:["Cliente", "Motoboy", "Correios", "Transportadora"])
        via(nullable:true, inList:["Rodoviária", "Aérea"], display:true)
        tenantId(nullable: false, display: false)
        idServicoCorreio(nullable:true)
        codigoServico(nullable:true)
        altLim(nullable:true)
        largLim(nullable:true)
        profLim(nullable:true)
        inicioRange(nullable:true)
        atualRange(nullable:true)
        fimRange(nullable:true)
        validadeRange(nullable:true)
        cabecalhoEtiqueta(nullable:true)
    }

    public String toString() {
        nome
    }

    //uso para correios
    Long idServicoCorreio

    //uso para correios
    String codigoServico

    //para uso do range dos correios
    String cabecalhoEtiqueta

    String inicioRange

    String fimRange

    String atualRange

    Date validadeRange
}

有谁知道如何帮助我这样做?我是否必须在我的类中放置一个变量来操作值,然后才在Criteria列表中调用它们?

1 个答案:

答案 0 :(得分:0)

sqlRestriction应该做你想做的事:

def results = Transportadora.createCriteria().list() {
    or {
       lt('validadeRange', reminderDate)
       sqlRestriction 'atualRange + 1000 > fimRange'
    }
}

请参阅http://gorm.grails.org/latest/hibernate/manual/index.html#criteria