我在与执行上的SQL使用QueryDSL建一个查询的问题2008年QueryDSL枚举错误转换数据类型为varchar浮动
我有我的实体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')
当没有返回结果,这是好的,并没有遇到任何错误,但是当有结果我得到如下:
[SqlExceptionHelper.logExceptions] SQL Error: 8114, SQLState: S0005 [SqlExceptionHelper.logExceptions] Error converting data type varchar to float.
如果我手动执行的查询,而无需解析使用STR ()查询工作正常,并返回我期望的结果。
有谁知道:
- 为什么SQLServer的方言决定使用STR解析()?
- 有没有办法来防止这种情况?
干杯
SQL中并没有对关于什么要求您使用'STR()'。这将是你的ORM做自己的事情,这种方式毫无意义。 STR()字符串 - 数字字段。它永远不会包含任何像'Value1'的东西。我猜你的问题是QueryDSL层中的某种类型或配置,它认为该字段是数字的,因此会话并试图在SQL中使用STR()。 –
嗨安德鲁,感谢您的回应 - 是的,我不认为这是SQL本身做任何事情,它只能执行它给出的内容,我明白这个问题与ORM如何解释然后通过执行。这就是说,就像你说,它没有任何意义,为什么它使用STR()在明确定义的“字符串”类型的枚举字段.... – TCollins