I have the following JPQL query running in a Payara Micro 5.2022.2 application.
TypedQuery<UserDto> query = entityManager.createQuery(
"SELECT new UserDto((FUNCTION('COALESCE', (select fullname from Person p where p.userId = u.id), 'Name not set'))) " +
" FROM User u WHERE u.id = :userId", User.class);
query.setParameter("userId", 12);
return query.getResultList();
The type of the field is returned as java.lang.Object and not as java.lang.String since the column, fullname is varchar in it's table.
This forces me to have the constructor to have an Object parameter and not String
I wanted to find out if there is a way to get this code (FUNCTION('COALESCE', (select fullname from Person p where p.userId = u.id), 'Name not set'))) to return a String and not an Object
As per Andrey B. Panfilov's comment, I had to cast the return value to a String: