【发布时间】:2021-05-03 03:17:05
【问题描述】:
是否可以在单个查询中初始化多个对象?我正在尝试将多个属性映射到相应的 DTO,但出现语法错误。查询如下:
em.createQuery("SELECT "
+ "new com.x.y.z(fte.attr1 "
+ "fte.attr2, fte.attr3),"
+ "new com.x.y.a(fet.attr4, fet.attr5,"
+ "fet.attr6, fet.attr7, fet.attr8, fet.attr9), "
+ "new com.x.y.b(fte.attr10,"
+ " fte.attr11, fte.attr12, fte.attr13, fte.attr14), "
+ "new com.x.y.c(fte.attr15, "
+ "fte.attr16, v.attr17, v.attr18) "
+ "FROM Table1 fte "
+ "LEFT JOIN Table2fet ON fte.attr1= fet.attr1 AND fte.attr1= fet.attr1"
+ "LEFT JOIN Table3 v ON v.attr1= fte.attr1"
+ "WHERE fte.attr1= :attr1 AND fte.attr1= :attr1",
Object[].class)
.getResultStream()
但是 JPA 指出问题 org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: , 第 1 行附近的第 115 列被解析为 new com.x.y.a 位置
【问题讨论】:
-
根据那里发布的答案,JPA 规范似乎允许这样做,但 Hibernate 不允许
-
是的,JPA 标准确实允许这样做,并且快速切换到 EclipseLink 似乎也可以,但无论出于何种原因,Hibernate 都不允许这样做