2015-11-05 245 views
0

我在與執行上的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 ()查詢工作正常,並返回我期望的結果。

有誰知道:

  1. 爲什麼SQLServer的方言決定使用STR解析()?
  2. 有沒有辦法來防止這種情況?

乾杯

+0

SQL中並沒有對關於什麼要求您使用'STR()'。這將是你的ORM做自己的事情,這種方式毫無意義。 STR()字符串 - 數字字段。它永遠不會包含任何像'Value1'的東西。我猜你的問題是QueryDSL層中的某種類型或配置,它認爲該字段是數字的,因此會話並試圖在SQL中使用STR()。 –

+0

嗨安德魯,感謝您的迴應 - 是的,我不認爲這是SQL本身做任何事情,它只能執行它給出的內容,我明白這個問題與ORM如何解釋然後通過執行。這就是說,就像你說,它沒有任何意義,爲什麼它使用STR()在明確定義的「字符串」類型的枚舉字段.... – TCollins

回答

0

所以,我對什麼發生在這裏是調用.stringValue()在查詢中插入STR(),沒有得到像或許你正打算枚舉的字符串值的理解。不確定是否有辦法做到這一點,因爲它正在處理一個'Path'類型的對象。

我認爲queryDSL真的打算讓你將枚舉與枚舉或對象與對象進行比較。它會處理轉換,所以你不需要擔心它。

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

其中filter.getSelectedApprovalTypeList()回到你的ApprovalTypeEnum

相關問題