What is the use of setResultTransformer method in criteria API? Can someone explain this with a simple example? I read the javadocs but i am not able to understand them clearly.
Regards,
Hibernate's ResultTransformers provide various ways to map the result of your query to different data structures. They were commonly used in Hibernate 4, got deprecated in Hibernate 5 and got replaced by the functional interfaces TupleTransformer and ResultListTransformer in Hibernate 6.
DISTINCT_ROOT_ENTITY. Each row of results is a distinct instance of the root entity. static String. ROOT_ALIAS. The alias that refers to the "root" entity of the criteria query.
The default ResultTransformer for a Criteria query which does not use setProjections() will be ROOT_ENTITY
.
If we have Student in a ManyToMany relationship to Department a query might look like this ...
Session session = (Session) getEntityManager().getDelegate(); Criteria crit = session.createCriteria(Student.class) .createAlias('departments', 'department');
This query will return duplicates. But set the ResultTransformer
as ...
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
Now the results will be distinct when Hibernate marshalls the results. (Or do I mean unmarshalls?)
If you do not want Hibernate to return the query as a List<Student>
but prefer to handle the results as a List<Object[]>
then
crit.setResultTransformer(CriteriaSpecification.PROJECTION)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With