我在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()的解析的情况下手动执行查询,则查询工作正常并返回我期望的结果。
有谁知道:
干杯
答案 0 :(得分:0)
所以,我对这里发生的事情的理解是调用.stringValue()是在查询中插入STR(),而不是像你想要的那样得到枚举的字符串值。不确定是否有办法这样做,因为它正在处理一个' Path'类型对象。
我认为queryDSL真的打算让你将枚举与枚举或对象与对象进行比较。然后它会处理转换,所以你不必担心它。
即。
builder.and(qPositionToIndividualRelationship.approvedBy.in(filter.getSelectedApprovalTypeList()));
其中filter.getSelectedApprovalTypeList()
会返回您ApprovalTypeEnum