Первые мои расстановок:ClassCastException (String в Long) при выполнении подзапроса с критериями
- MySQL-разъем-Java 5.1.24
- гибернации-жильный 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 и я получил целое не может быть приведен к Лонга, так что, почему я перешел на 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
Как решить проблему с литьем?
Или, может быть, есть лучший способ сделать это с помощью критериев?
Благодаря
Если строка ' "1"' и 'долго 1L',' равно() '' возвращает false'. Будет ли 'eqProperty()' return 'true'? – acdcjunior
@acdcjunior: eqProperty сравнивает два свойства двух объектов в запросе Criteria. В итоге сравнение будет выполнено сгенерированным предложением SQL '='. Я не вижу, что это связано с методом Java equals(). –
Спасибо, что вы были правы, обманули, потому что это были ограничения перед подзапросом: /. – Falydoor