QueryDSL 枚举将数据类型 varchar 转换为 float 时出错

QueryDSL Enum Error converting data type varchar to float

我在 SQL 2008 年执行使用 QueryDSL 构建的查询时遇到问题。

我的实体 bean 上有一个枚举字段:

@Column(name="APPROVAL_BY")
@Enumerated(EnumType.STRING)
private ApprovalTypeEnum approvedBy;

我正在使用它在 querydsl BooleanBuilder 中过滤我的结果集:

builder.and(qPositionToIndividualRelationship.approvedBy.stringValue().in(filter.getSelectedApprovalTypeList()));

然后在执行的 SQL 中产生以下子句:

str(positionto1_.APPROVAL_BY) in ('Value1' , 'Value2')

当 return 没有结果时这很好并且没有遇到错误,但是当有结果时我得到以下信息:

[SqlExceptionHelper.logExceptions] SQL Error: 8114, SQLState: S0005 [SqlExceptionHelper.logExceptions] Error converting data type varchar to float.

如果我在不使用 str() 进行解析的情况下手动执行查询,则查询工作正常并且 returns 我期望的结果。

有谁知道:

  1. 为什么 SqlServer 方言决定使用 str() 进行解析?
  2. 有什么办法可以避免这种情况吗?

干杯

所以,我对这里发生的事情的理解是调用 .stringValue() 是在查询中插入 STR(),而不是像您想要的那样获取枚举的字符串值。不确定是否有办法做到这一点,因为它正在处理 'Path' 类型的对象。

我认为 queryDSL 的真正目的是让您比较枚举与枚举,或对象与对象。然后它将处理转换,因此您无需担心。

即。 builder.and(qPositionToIndividualRelationship.approvedBy.in(filter.getSelectedApprovalTypeList()));

其中 filter.getSelectedApprovalTypeList() returns 您的 ApprovalTypeEnum

列表