Hibernate 5 无法将字符串与 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和清除数字= 437。

在休眠版本4.x中,它可以得到bcCode = 00437的结果。

在版本5.x中,除非输入clearingNumber = 00437,否则结果为空

所以问题是如何在不更改参数类型(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));

它一开始应该不起作用。您可能很幸运地将字符串转换为整数。

将字符串与 int 进行比较并不是很聪明。我会手动将字符串转换为 int,然后比较它们。或者您需要以某种方式删除bcCode中的所有尾随空格,然后将它们作为字符串与字符串进行比较。

相关内容

  • 没有找到相关文章

最新更新