gpt4 book ai didi

java - 使用 Criteria 运行子查询时出现 ClassCastException (String to Long)

转载 作者:可可西里 更新时间:2023-11-01 07:15:03 28 4
gpt4 key购买 nike

首先我的设置:

  1. mysql-connector-java 5.1.24
  2. hibernate 核心 4.1.10.Final

运行此标准查询时出现 ClassCastException 错误:

Criteria sellableItemsCriteria = session.createCriteria(MarketData.class, "md");
sellableItemsCriteria.add(Restrictions.in("region", regions));
sellableItemsCriteria.add(Restrictions.in("itemTypeId", items));
DetachedCriteria sellOrderSizeCriteria = DetachedCriteria.forClass(MarketOrder.class);
sellOrderSizeCriteria.add(Restrictions.eq("marketDataId", "md.id"));
sellOrderSizeCriteria.add(Restrictions.eq("bid", false));
sellOrderSizeCriteria.setProjection(Projections.count("marketDataId"));
sellableItemsCriteria.add(Subqueries.lt(0L, sellOrderSizeCriteria));

异常:

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long

问题出在这一行(首先我尝试使用 0 而不是 0L 并且我得到 Integer cannot be cast to Long 所以我切换到 Long 的原因):

sellableItemsCriteria.add(Subqueries.lt(0L, sellOrderSizeCriteria));

这是我要运行的 mysql 查询:

SELECT md.* FROM `marketdata` md
WHERE md.region IN (:regions)
AND md.item_typeID IN (:items)
AND (SELECT COUNT(marketData_id) FROM `marketorder` WHERE marketData_id = md.id AND bid = 0) > 0

如何解决转换问题?

或者也许有更好的方法使用 Criteria 来做到这一点?

谢谢

最佳答案

我很确定您会发现异常实际上来自这一行:

sellOrderSizeCriteria.add(Restrictions.eq("marketDataId", "md.id"));

此行尝试将 MarketOrdermarketDataId 属性与字符串 "md.id" 进行比较。那不是你想做的。您要做的是将 MarketOrdermarketDataId 属性与 mdid 属性进行比较。因此你需要使用 eqProperty()相反:

sellOrderSizeCriteria.add(Restrictions.eqProperty("marketDataId", "md.id"));

关于java - 使用 Criteria 运行子查询时出现 ClassCastException (String to Long),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16258001/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com