在JPQL中,是否可以使用列表作为参数编写“select new”?

时间:2014-04-10 15:21:36

标签: java sql jpa jpql

我想知道是否可以编写一个以列表作为参数的“选择新”查询。

例如,一方面,我有一个表“父亲”和一个表“儿童”。一个孩子只有一个父亲,一个父亲有多个孩子。另一方面,我有一个对象“FatherDto”,构造函数需要一个“父”对象和一个子列表。

在JPQL中,可以编写类似

的内容
SELECT new FatherDto(fat, childrenList) 
FROM fat, (select new Child(ch) from children ch where ...) as childrenList from children child
WHERE ...

目标是仅使用一个查询获取父亲列表,其中包含子列表。

1 个答案:

答案 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视为路径表达式。