java - 将本机查询转换为 JPQL
问题描述
我有一个本机查询,如下所示:-
SELECT T1.component_name,T1.model,T1.models_uid,r.revision_uid from
( select cm.component_name, cm.models_uid, cm.model, MAX(r.modified_epoch)
As created_at from cmla1.components_models cm left join cmla1.revisions r on cm.models_uid=r.models_uid
group by cm.component_name,cm.models_uid ) T1
left join cmla1.revisions r on T1.created_at =r.modified_epoch
我想将此本机查询转换为 JPQL 并将结果转换为另一个 POJO 类 ComponentModelData,如下所示:-
@Getter
@Setter
@NoArgsConstructor
public class ComponentModelData {
@Override
public String toString() {
return "ComponentModelData [componentName=" + componentName + ", componentModelName=" + componentModelName
+ ", latestRevId=" + latestRevId + ", componentModelId=" + componentModelId + "]";
}
public ComponentModelData(String componentName, String componentModelName, Integer componentModelId,Integer latestRevId) {
super();
this.componentName = componentName;
this.componentModelName = componentModelName;
this.latestRevId = latestRevId;
this.componentModelId = componentModelId;
}
private String componentName;
private String componentModelName;
private Integer latestRevId;
private Integer componentModelId;
}
我正在使用下面的 JPQL 查询。但它给了我错误
@Query("SELECT new dto.componentmodel.ComponentModelData(cm.name,cm.model,cm.id,r.revisionId)"+
" from ( select cm.name," +
" cm.id," +
" cm.model," +
" MAX(r.modifiedEpoch) As created_at" +
" from ComponentModel cm" +
" left join ComponentModel.revisions r"+
" group by cm.name,cm.id ) T1" +
" left join ComponentModel.revisions r")
List<ComponentModelData> findComponentModelRevisionData();
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 116 [SELECT new dto.componentmodel.ComponentModelData(cm.name,cm.model,cm.id,r.revisionId) from ( select cm.name, cm.id, cm.model, MAX(r.modifiedEpoch) As created_at from cmla.entity.ComponentModel cm left join ComponentModel.revisions r group by cm.name,cm.id ) T1 left join ComponentModel.revisions r]
组件模型.java
@Entity
@Table(name = "components_models")
@Getter
@Setter
@NoArgsConstructor
public class ComponentModel implements Serializable {
public ComponentModel(String comment, String alias, Integer id, Boolean isDeleted, String model, String name,
String vendor) {
super();
this.comment = comment;
this.alias = alias;
this.id = id;
this.isDeleted = isDeleted;
this.model = model;
this.name = name;
this.vendor = vendor;
}
private static final long serialVersionUID = -695799009535171917L;
@Column(name = "comment", columnDefinition = "text")
private String comment;
@Column(name = "alias", columnDefinition = "text")
private String alias;
@Column(name = "models_uid")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "is_deleted")
private Boolean isDeleted;
@Column(name = "model", columnDefinition = "text") // ,unique = true, nullable = false
private String model;
@Column(name = "component_name", columnDefinition = "text")
private String name;
@Column(name = "vendor", columnDefinition = "text")
private String vendor;
@Column(name = "display_name", columnDefinition = "text")
private String displayName;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "componentModel")
private List<Revisions> revisions = new ArrayList<>();
}
有谁知道我该怎么做。帮助将不胜感激!
解决方案
推荐阅读
- generics - 如何使用可以是多种特征对象的参数定义函数?
- maven - 运行 Maven 构建它在控制台错误下显示
- c++ - Qmake 在为 VS2017 构建 dll 项目时将“1”附加到输出文件名
- ubuntu - 加载共享库时出错:libhdf5.so.101:无法打开共享对象文件
- android - 使用 stopWithTask="true" 时未在服务上调用 onDestroy
- html - 位置:绝对导致元素在网页中消失
- c++ - 在 C++ 中有效地保存许多连续记录的图像
- javascript - 尝试在summernote中添加链接时,给定范围不在文档中
- node.js - 如何防止通过 Cloudfront、EC2 和 S3 上的静态站点运行的站点上的点击劫持和缓慢发布
- airflow - Apache Airflow 和 AWS Glue 之间的连接出现问题