我正在尝试使用投影从实体中提取数据以及它具有的某些关系。然而。投影上的构造函数接受三个参数;一个集合,整数和另一个整数。如果我没有将集合作为参数,这一切都可以正常工作,但是一旦添加集合,我就会开始收到 SQL 语法查询错误。
这是我正在使用的示例...
@Entity
public class Resource {
private Long id;
private String name;
private String path;
@ManyToOne
@JoinColumn(name = "FK_RENDITION_ID")
private Rendition rendition;
}
@Entity
public class Document {
private Long id;
private Integer pageCount;
private String code;
}
@Entity
public class Rendition {
Long id;
@ManyToOne
@JoinColumn(name="FK_DOCUMENT_ID")
Document doc;
@OneToMany(mappedBy="rendition")
Set<Resource> resources;
}
public class Projection {
@QueryProjection
public Projection(Set<Resource> resources, Integer pageCount, String code) {
}
}
这是我正在使用的查询(与我正在处理的简化版本不完全相同)....
QRendition rendition = QRendition.rendition;
Projection projection = from(rendition)
.where(rendition.document().id.eq(documentId)
.and(rendition.resources.isNotEmpty())
.limit(1)
.singleResult(
new QProjection(rendition.resources,
rendition.document().pageCount,
rendition.document().code));
只要我的投影类中没有 rendition.resources,此查询就可以正常工作。如果我尝试添加它,我会开始收到格式错误的 SQL 错误(它会更改输出 sql 以便它以此开头。
select . as col_0_0_
所以,我想我的主要问题是如何在投影中包含一个 Set 作为对象?有可能,还是我只是在这里做错了什么?