我想知道是否可以编写一个以列表作为参数的“选择新”查询。
例如,一方面,我有一个表“父亲”和一个表“儿童”。一个孩子只有一个父亲,一个父亲有多个孩子。另一方面,我有一个对象“FatherDto”,构造函数需要一个“父”对象和一个子列表。
在JPQL中,可以编写类似
的内容SELECT new FatherDto(fat, childrenList)
FROM fat, (select new Child(ch) from children ch where ...) as childrenList from children child
WHERE ...
目标是仅使用一个查询获取父亲列表,其中包含子列表。
答案 0 :(得分:3)
不,你不能这样做,因为"子查询可以在WHERE或HAVING子句中使用" (来自规范)。
此外,构造函数必须只获得single_values_path_expression。摘自规范:
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_valued_path_expression) |
COUNT ([DISTINCT] identification_variable | state_valued_path_expression |
single_valued_object_path_expression) |
function_invocation
我不确定在new FatherDto(fat, childrenList)
中是否将childrenList视为路径表达式。