[英]Hibernate 5 can't compare string with int
我將休眠從版本4.3.7
遷移到了5.3.7
目前我的代碼是這樣的
public BcData findByBcCode(int clearingNumber) {
CriteriaBuilder cb = getCriteriaBuilder();
CriteriaQuery<BcData> query = cb.createQuery(BcData.class);
Root<BcData> bcAlias = query.from(BcData.class);
query.where(cb.equal(bcAlias.get(BcData_.bcCode), clearingNumber));
return findSingle(query, new HashMap<>());
}
因此,在DB, bcCode
的類型是String
,值00437
, 22437
和clearingNumber = 437。
在休眠版本4.x
,可以使用bcCode = 00437
獲得結果。
在版本5.x
,除非輸入為clearingNumber = 00437
否則結果為null。
所以問題是,如何在不更改參數類型(int clearingNumber)
情況下獲得與版本4
相同的結果。
謝謝。 更新1:內部方法相等,它以輸入參數為對象,因此通常可以比較多種類型的輸入參數
@Override
@SuppressWarnings("SuspiciousNameCombination")
public Predicate equal(Expression<?> x, Object y) {
return new ComparisonPredicate( this, ComparisonOperator.EQUAL, x, y );
}
更新2:終於我找到了解決方案,我們應該在查詢之前將bcCode解析為int
Expression<Integer> bcCodeExpr = bcAlias.get(BcData_.bcCode).as(Integer.class);
query.where(cb.equal(bcCodeExpr, clearingNumber));
一開始它不應該起作用。 您可能對將字符串轉換為整數很幸運。
將String與int進行比較不是很聰明。 我會手動將字符串轉換為int,然后進行比較。 或者,您需要以某種方式刪除bcCode中的所有尾隨空格,然后將它們作為字符串與字符串進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.