最初に私のセットアップ:
- mysql-connector-java 5.1.24
- hibernate-core 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
問題はこの行にあります (最初に 0L の代わりに 0 を試してみたところ、Integer を 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 でこれを行うためのより良い方法がありますか?
ありがとう