Search code examples
grailsgrails-orm

get a specific property for a domain in Grails


i'm making a tables cleaning service that takes the table name and the date field as arguments , here is the service code :

def cleanTables(tableName , dateField) {
    def comparisonDate
    def numOfRecordsDeleted
    use (TimeCategory){
        comparisonDate=new Date() -1.year
        }
    numOfRecordsDeleted=tableName.where { dateField <=comparisonDate }.deleteAll()
    log.info("deleted : " +numOfRecordsDeleted)
}

i'm successfully passing to this service the table name but i can't pass the date field , so how to get a specific property from a domain for example a domain named Payments got a property dateCreated , so i pass to my service Payments and dateCreated.


Solution

  • With where queries you have access to criteria query methods such as eq(), or in this case, le(). Those methods take the name of the property as an argument, which is what you need. I tweaked the code a bit because you're actually interacting with domain classes, not tables. Small distinction, until you start working with HQL.

    def cleanDomainClass(String domainClassName, String dateField) {
        def domainClass = Class.forName("some.package.$domainClassName")
        def comparisonDate = use (TimeCategory) { new Date() -1.year }
        def numOfRecordsDeleted = domainClass.where { le(dateField, comparisonDate) }.deleteAll()
    
        log.info("deleted : $numOfRecordsDeleted")
    }