Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using transient property in findBy or listOrderBy methods

I have a domain class using some transient property foo. Now I want to use listOrderByFoo on this property but I get the error "could not resolve property: foo". Is there any way to use transient properties in listOrderByProperty() or findByProperty() ?

class Bar {
 String name
 static transients = ['foo']
 def getFoo() {
   ...
 }
}

Bar.findAllByFooIsNotNull()
Bar.listOrderByFoo()
like image 295
skurt Avatar asked Nov 05 '11 19:11

skurt


1 Answers

Unfortunately no. Like Matt said in his comment to your question, since those fields are marked as transient, they are not persisted to the database and thus there's no way for you to query them. If you want to find or list by a transient property, you'll need to write a closure to iterate over a list of objects with the transient property already set. There's no dynamic GORM method that you can use to do it.

def bars = [ new Bar(foo:1), new Bar(foo:2), new Bar(foo:4), new Bar(foo:3) ];

// Find bar with foo=3
bars.find { it.foo == 3 }

// Sort bars by foo
bars.sort { a,b -> a.equals(b)? 0: a.foo<b.foo? -1: 1 }
like image 85
Todd Avatar answered Sep 30 '22 14:09

Todd