views:

27

answers:

1

I'm attempting to pull up all entities that have a name that doesn't partially match a given string.

MyEntity.findAllByNameNotLike('bad%')

This gives me the following error:

No such property: nameNot for class: MyEntity Possible solutions: name" type="groovy.lang.MissingPropertyException">

I had a quick look at the criteria style but I can't seem to get that going either,

def results = MyEntity.withCritieria {
    not(like('name', 'bad%'))
}

No signature of method: MyEntity.withCritieria() is applicable for argument types: (MyService$_doSomething_closure1)

Ideally I would like to be able to apply this restriction at the finder level as the database contains a large number of entities that I don't want to load up and then exclude for performance reasons.

[grails 1.3.1]

A: 

I've worked out how to do this using withCriteria, the not should have been a closure of its own.

def results = MyEntity.withCritieria {
  not {
    like('name', 'bad%'))
  }
}

The problem I initially had using withCriteria was that I was trying to test this as a unit test, which works fine with the dynamic finders, but not with the criteria API (as far as I can tell).

(I'll leave this unanswered for a day to see if anyone has a better solution, otherwise I'll accept my answer)

Richard Paul