簡體   English   中英

Hibernate 5無法將字符串與int進行比較

[英]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 ,值0043722437和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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM