【问题标题】:Using new statement in JPQL request在 JPQL 请求中使用新语句
【发布时间】:2020-04-25 06:39:27
【问题描述】:

我在 JPQL 查询中使用new,如下方式

select 
  ob.property1,
  NEW package1.CustomObject(item, dimension, material, product)
from mainTable ob
LEFT JOIN ....

应用程序在ob.property1 说这是一个意外令牌后抱怨昏迷。似乎您不能在 select 子句中使用带有 new 的多个列。你能帮帮我吗

【问题讨论】:

    标签: sql hibernate jpa jpql


    【解决方案1】:

    根据this,您有以下选择:

    1. 将值包装在类型安全的 Java 对象中,该对象将作为查询结果返回。
    select new package1.CustomObject(item, dimension, material, product)
    from MainTable ...
    

    投影类在实体查询中必须是完全限定的,并且它必须定义一个匹配的构造函数。这里的类不需要映射。它可以是 DTO 类。如果它确实代表一个实体,则结果实例将以 NEW 状态返回(非托管!)。

    HQL 支持额外的“动态实例化”功能。

    1. 查询可以指定返回 List 而不是 Object[] 以获得标量结果。
    select new list(item, dimension, material, product)
    from MainTable ...
    

    此查询的结果将是 List<List>,而不是 List<Object[]>

    1. 将标量包装成Map
    select new map(
      item as iName,
      dimension as iDimension,
      material as iMaterial,
      product as iProduct)
    from MainTable ...
    

    此查询的结果将是 List<Map<String, Object>>,而不是 List<Object[]>。映射的键由赋予选择表达式的别名定义。如果用户不指定别名,则键将是每个特定结果集列的索引(例如 0、1、2 等)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 2012-05-19
      • 2016-12-20
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      相关资源
      最近更新 更多