我在與執行上的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