Prev Next

API / Apache Grails Interview questions

Explain the internal working of a GORM dynamic finder at runtime?

Because a dynamic finder like findByTitleAndAuthor() never appears as real source code, GORM has to intercept the call at the moment it happens and figure out, from the method name string alone, what query the caller actually intended.

flowchart TD A[Code calls Book.findByTitleAndAuthor(t, a)] --> B[Method not found on the real class] B --> C[Groovy's methodMissing/GroovyObject hook invoked] C --> D[GORM's dynamic method dispatcher inspects the method name string] D --> E[Strip prefix: find/findAll/countBy] E --> F[Parse remaining segment: split on And/Or, extract property names] F --> G{Each parsed property exists on the domain class?} G -- No --> H[Throw MissingMethodException at runtime] G -- Yes --> I[Detect suffix operators: Like, GreaterThan, Between, etc.] I --> J[Build the underlying query object programmatically] J --> K[Execute the query against the datastore] K --> L[Return result matching the finder's prefix: single instance, list, or count]

Since the method genuinely doesn't exist on the class, Groovy's dynamic dispatch machinery (methodMissing, part of the language's metaprogramming support) hands the call to GORM's own dynamic method handler, which strips the recognized prefix (findBy, findAllBy, countBy), splits the remaining text on conjunction keywords like And/Or, and checks each resulting segment against the domain class's actual properties — a property that doesn't exist throws a runtime exception right there, which is exactly the compile-time-blind-spot GORM Data Services were built to avoid.

Once every segment resolves to a real property (optionally with a recognized comparison suffix like GreaterThan or Like), GORM assembles the equivalent query programmatically and executes it, returning either a single instance, a list, or a count depending on which prefix the original method name started with.

What Groovy language feature does GORM rely on to intercept a call to a dynamic finder method that doesn't really exist?
What happens if a dynamic finder's method name references a property that doesn't actually exist on the domain class?

More Related questions...

What is Apache Grails? What is GORM? What is a Grails domain class? What is a Grails controller? What is a Groovy Server Page (GSP)? What is convention-over-configuration in Grails? What is a dynamic finder in GORM? What is Grails Forge? What is the Grails Wrapper (grailsw)? What is a Grails service? What are the types of environments Grails supports? What is scaffolding in Grails? What is a Grails plugin? Define GORM Data Services? How do you create a new Grails application using Grails Forge? Why did Grails move under the Apache Software Foundation? Why do we use GORM instead of writing raw SQL/JDBC? How does Grails apply convention-over-configuration to map URLs to controllers? What is the difference between Grails 7 and Grails 8? When should you use GORM Data Services instead of dynamic finders? What is the difference between a dynamic finder and a criteria query? What happens when a domain class fails validation in Grails? What is the difference between a Grails controller and a Grails service? Which is better for a new project in 2026: Grails 7 or Grails 8, and why? How can you optimize GORM queries to avoid the N+1 problem? How do you troubleshoot a LazyInitializationException in a Grails application? Explain the lifecycle of a request in a Grails application? Explain the execution flow of a GORM save() call under the hood? Explain the internal working of GORM Data Services? What is the difference between an interceptor and a filter in Grails? Why should you mark long-running database work with @Transactional at the service layer? What is a Grails command object? How does Grails integrate with Spring Security? What is the difference between static and dynamic scaffolding in Grails? How does Grails support internationalization (i18n)? Explain the internal working of Grails' convention-based URL mapping? What is the difference between Grails profiles like "web" and "rest-api"? How do you enforce validation constraints on a Grails domain class? What is the role of the asset-pipeline plugin in Grails? How does Grails support database migrations? Explain the sequence of events when a GSP page is rendered? What is the difference between GORM criteria queries and HQL? How do you configure multi-tenancy in a Grails application with GORM? What is the difference between Grails' component model and Spring Boot's plain REST controller approach? Explain how Grails' dependency injection works with Spring beans? How do you write unit and integration tests for a Grails application? What is the difference between unit tests and integration tests in Grails testing? Explain the internal working of a GORM dynamic finder at runtime? What is the difference between Apache Grails and Ruby on Rails? Explain how GORM's optimistic locking prevents concurrent update conflicts?
Show more question and Answers...


Comments & Discussions