Quite often JPQL is not powerful enough to perform the queries we need in real world projects. In general, this is not an issue because JPA is designed as a leaky abstraction and we can use the full potential of SQL by using native queries or calling stored procedures.
The only downside is, that these queries return a
List of
Object[] instead of the mapped entities and value objects we are used to work with. Each
Object[] contains one record returned by the database. We then need to iterate through the array, cast each
Object to its specific type and map them to our domain model. This creates lots of repetitive code and type casts as you can see in the following example.
It would be more comfortable, if we could tell the
EntityManager to map the result of the query into entities or value objects as it is the case for JPQL statements. The good news is, JPA provides this functionality. It is called SQL result set mapping and we will have a detailed look at it during this series:
- Result Set Mapping: The Basics
- Result Set Mapping: Complex Mappings
- Result Set Mapping: Constructor Result Mappings (coming soon)
- Result Set Mapping: Hibernate specific features (coming soon)