我有两个实体,一个保存基本案例相关数据,另一个保存某个案例的所有更新。
@Entity(name = "Case")
@EntityListeners(AuditingEntityListener.class)
@NamedQueries({
public class Case extends AbstractAuditableEntity implements Serializable {
@Column(nullable = false)
private Long referenceId;
@ManyToOne(optional = false)
private Incident Incident;
@OneToMany(targetEntity = CaseUpdate.class, orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "case")
@JoinColumn(name="case", nullable = false)
@OrderBy("created desc")
private List<CaseUpdate> caseUpdates = new ArrayList<CaseUpdate>();
另一个具有ManyToOne关系的类如下
@Entity(name = "CaseUpdate")
@EntityListeners(AuditingEntityListener.class)
public class CaseUpdate extends AbstractAuditableEntity implements Serializable {
public CaseUpdate() {
}
@Id
@GeneratedValue
private Long id;
@Column
private String status;
@Column(nullable = false)
private String type;
@Column(columnDefinition = "TEXT")
private String description;
@Column(name = "created",nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date created;
@Column
@Temporal(TemporalType.DATE)
private Date restoreDate;
@Column
@Temporal(TemporalType.DATE)
private Date responseDate;
@Column
@Temporal(TemporalType.DATE)
private Date commitmentDate;
@JoinColumn(name="caseUpdates")
@ManyToOne(optional = false)
private Case case;
我正在尝试使用 BooleanExpression 搜索 Case 表和 CaseUpdate 表来构建查询。当它尝试搜索时出现异常
引起:org.eclipse.persistence.exceptions.QueryException:异常描述:index() 需要具有非空列表顺序列的 CollectionMapping 的 QueryKeyExpression。[org.eclipse.persistence.mappings.OneToManyMapping[caseUpdates]]在[Query Key caseUpdates Base au.net.iinet.fms.data.entities.Case]中不满足这个条件查询:ReportQuery(referenceClass=Case jpql=
"select count(case) from Case case left join case.caseUpdates as case_caseUpdates_0 where index(case_caseUpdates_0) = ?1 and case.faultIncident.faultDomain = ?2 and case_caseUpdates_0.status = ?3")
以下代码用于创建搜索条件
BooleanExpression overallCriteria = null;
if (params.getStatus() != null && !params.getStatus().isEmpty()) {
overallCriteria = QCase.case.caseUpdates.get(0).status.eq(params.getStatus());
}
QCase 类是使用 Querydsl 生成的。我不确定这个异常意味着什么以及如何解决它,有什么想法吗?