Question: I have a search page where the user should be able to search authors based on their id (GORM generated id, not a property in my domain class) or their name.
The search page works fine when I search on the author’s name but when trying to search on their id, I get the error below. 

Message:

```
java.lang.String cannot be cast to java.lang.Long

```

Please let me know how I can fix this.

Here is my search method in the controller:

```
def search(Integer max) {
    params.max = Math.min(max ?: 10, 100)

    def authorList = Author.createCriteria().listDistinct () {
        if ( params.id ) {
            eq("id", "%${params.id}%")
        }
        if ( params.name ) {
            ilike("name", "%${params.name}%")
        }

    respond authorList, model:[authorInstanceCount: Author.count()]
}

```

Answer: 
Replace this:

```
eq("id", "%${params.id}%")

```

with

```
eq("id", params.long('id'))

```

`params.long('id')` tries to safely convert the parameter to a `Long`, i.e. it will return `null` if the conversion cannot be performed rather than throwing an exception.
The exception you get is quite informative. You're trying to pass `java.lang.String` in place where `java.lang.Long` is required. Pass `params.id` without converting it to string:

```
eq("id", params.id) // if params.id is java.lang.Long
// or
eq("id", params.id.toLong()) // if params.id is java.lang.String

```

You've also missed closing curly bracket after closure of `listDistinct()` method (it might be a mistake during copy-pasting).