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

时间:2015-11-05 02:57:22

标签: java sql-server enums querydsl

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

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

@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')

当没有结果要返回时,这很好并且没有遇到错误,但是当有结果时我会得到以下结果:

  

[SqlExceptionHelper.logExceptions] SQL错误:8114,SQLState:S0005   [SqlExceptionHelper.logExceptions]将数据类型varchar转换为float时出错。

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

有谁知道:

  1. 为什么SqlServer方言决定使用str()?
  2. 进行解析
  3. 有办法防止这种情况吗?
  4. 干杯

1 个答案:

答案 0 :(得分:0)

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

我认为queryDSL真的打算让你将枚举与枚举或对象与对象进行比较。然后它会处理转换,所以你不必担心它。

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

其中filter.getSelectedApprovalTypeList()会返回您ApprovalTypeEnum

的列表