0

我有两个实体,一个保存基本案例相关数据,另一个保存某个案例的所有更新。

@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 生成的。我不确定这个异常意味着什么以及如何解决它,有什么想法吗?

4

0 回答 0