Problem

If you have grails errors message:

Grails No row with the given identifier exists: [Category#0]

it means that data consistency of your app is broken.

Solution

  • First you need to decipher the message. It says that you have class named Category and you are trying to reference an object with id - 0 . Since this row with id doesn't exist you get this error.

  • Next you need to find where and who is trying to get information about this object. This can be done by checking the stack trace of the application.

at java.util.HashMap.containsKey(HashMap.java:596)
at Book.BookController.$tt__index(BookController.groovy:30)
at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction
(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute
(TransactionTemplate.java:133)
at grails.gorm.transactions.GrailsTransactionTemplate.execute
(GrailsTransactionTemplate.groovy:91)
... 39 common frames omitted

As you can see it's called from BookController line 30. So most probably while searching for Book you get this error ( better to check the code).

  • Last step is to fix currupted data by:
  • add this information in table Category
  • update reference table - Book and the field which points to Category with appropriate value