gpt4 book ai didi

java - HQL - 选择嵌套对象

转载 作者:行者123 更新时间:2023-11-30 02:52:19 24 4
gpt4 key购买 nike

考虑以下场景:两个数据库表(生产者和产品),具有一对多关系(一个产品由一个生产者创建,一个生产者有多个产品),每个表具有多个字段(包括名称和 ID) .

此外,考虑到我有两个托管实体(Producer 和 Produce)以及这些对象的两个较小版本(非托管),用作仅具有名称和 ID(以及关系)的 DTO(ProducerDTO 和 ProduceDTO)。

我想使用 HQL 查询来选择特定产品(作为 DTO)及其生产者集。更清楚:SELECT new ProduceDTO(product.id, new ProducerDTO( Producer.id, Producer.name), Produce.name) FROM Produce Produce JOIN Produce. Producer 生产者 WHERE ...

但是我在查询中的 product.id 之后收到一个 QuerySyntaxException: Unexpected token: , 。所以我的问题是:是否可以在 HQL 中选择嵌套的自定义对象,如果可以,其规则/限制是什么?对于单个自定义对象,它工作得很好,但是当我尝试嵌套 2 个或更多时,我遇到了问题。

注意:问题是为了更好地理解这种现象,不一定是针对这种特定情况(我已经通过实际类(class)找到了针对我的情况的解决方法)。

谢谢!

最佳答案

完整的 JPA 查询语言语法规范可以在官方 Java EE 7 文档中找到:http://docs.oracle.com/javaee/7/tutorial/persistence-querylanguage005.htm#BNBUF

具体来说,回答您问题的部分是:

constructor_expression ::= NEW constructor_name(constructor_item {, constructor_item}*)

constructor_item ::= single_valued_path_expression
| aggregate_expression

所以这基本上意味着

  1. 不能使用 null 构造函数。
  2. 每个参数可以是 single_valued_pa​​th_expressionaggregate_expression

此外,constructor_expression 仅出现在 select_expression 中,只能用作顶级查询构造,因此根据标准 JPQL,您无法使用嵌套进行技巧select ... 语句。我在网上找不到 HQL 的完整规范,所以不确定。

关于java - HQL - 选择嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38241377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com