0
votes

I have two domain classes:

class Entity {
    static hasMany = [
            titles: Title
    ]
}

class Title {
    Boolean isActive

    static belongsTo = [entity:Entity]  

    static mapping = {
        isActive type: 'yes_no'
    }
}

Now when I am calling Entity.get(0) I would like to take from the database the Entity with id=0, but only with active Titles (where isActive = true). Is it possible in grails? I've tried to add where clause in static mapping of Title domain class:

static mapping = {
    isActive type: 'yes_no'
    where 'isActive = Y'
}

or

static mapping = {
    isActive type: 'yes_no'
    where 'isActive = true'
}

but it doesn't work. I am using Grails in version 2.2.1

Could You help me? Thank You in advance.

1

1 Answers

1
votes

In this case you can use criteria to do that:

Entity.createCriteria().get {
  eq('id', 0)
  projections {
    titles {
      eq('isActive', true)
    }
  }

}

I don't think it's possible to set a default where to be applied in all your database calls to that Domain Class.

You can also wrap your logic in a service:

class EntityService {
  def get(Long id) {
    return Entity.createCriteria().get {
      eq('id', id)
      projections {
        titles {
          eq('isActive', true)
        }
      }
    }
  }
}