Is this possible: JPA/Hibernate query with list property in result?

雨燕双飞 提交于 2019-11-28 21:30:26

The query without the NEW (selecting a scalar value and a collection-valued path expression) isn't valid so I don't think that adding a NEW will make things work.

For the record, this is what the JPA 2.0 specification says in the section 4.8 SELECT Clause:

The SELECT clause has the following syntax:

select_clause ::= SELECT [DISTINCT] select_item {, select_item}*
select_item ::= select_expression [ [AS] result_variable]
select_expression ::=
         single_valued_path_expression |
         scalar_expression |
         aggregate_expression |
         identification_variable |
         OBJECT(identification_variable) |
         constructor_expression
constructor_expression ::=
         NEW constructor_name ( constructor_item {, constructor_item}* )
constructor_item ::=
         single_valued_path_expression |
         scalar_expression |
         aggregate_expression |
         identification_variable
aggregate_expression ::=
         { AVG | MAX | MIN | SUM } ([DISTINCT] state_field_path_expression) |
         COUNT ([DISTINCT] identification_variable | state_field_path_expression |
                  single_valued_object_path_expression)

I believe you need to declare a 0-arg constructor in your UserDTO class.

EDIT: Or a constructor which takes Integer instead of int as the first argument. When looking up constructors using reflection Hibernate might not treat them as 'compatible' types.

Basically, I would focus on the Unable to locate appropriate constructor on class [...UserDTO] part of the message.

I think that you should try something like:

select new org.test.userDTO( u.id, u.name, u.securityRoles) AS uDTO,
  uDTO.setRoles(u.securityRoles)
 FROM User u
 WHERE u.name = :name
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!