#spring-boot #hibernate #spring-data-jpa #hql #jpql
#весенняя загрузка #спящий режим #spring-data-jpa #hql #jpql — файл #jpql
Вопрос:
Тип данных PatientID — это BigInteger в entity Object
private BigInteger patientId;
Код:
@Override
public List<ChatRoomHistory> getLastChatDetails(List<String> patientIds) {
String queryStr = "FROM ChatRoomHistory where type = 'NO' and patientId in :patientIds ORDER BY chatCloseTime DESC";
TypedQuery<ChatRoomHistory> query = sessionFactory.getObject().getCurrentSession().createQuery(queryStr, ChatRoomHistory.class);
query.setParameter("patientIds", patientIds);
return query.getResultList();
}
Ошибка
2020-08-16 19:52:27,939 [http-nio-8080-exec-5:] c.t.c.u.e.GlobalExceptionHandler.handleException:243
ERROR - new Global exception handled! Message = java.util.LinkedHashMap cannot be cast to java.math.BigInteger
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.math.BigInteger
at org.hibernate.type.descriptor.java.BigIntegerTypeDescriptor.unwrap(BigIntegerTypeDescriptor.java:19)
at org.hibernate.type.descriptor.sql.DecimalTypeDescriptor$1.doBind(DecimalTypeDescriptor.java:47)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:74)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280)
Комментарии:
1. Вы отправляете,
List<String>
дляpatientIds
недействительно, я думаю, вам следует отправитьList<BigInteger>
2. Я также пробовал с BigInteger, но получаю ОШИБКУ — обработано новое глобальное исключение! Сообщение = java.util.LinkedHashMap не может быть преобразовано в java.math. BigInteger java.lang. ClassCastException: java.util.LinkedHashMap не может быть преобразован в java.math. BigInteger
Ответ №1:
Как сказано в комментарии, вы не можете передать список строк в качестве параметра, предназначенного для числового поля.
Вы должны объявить свой параметр как
public List<ChatRoomHistory> getLastChatDetails(List<BigInteger> patientIds)
Комментарии:
1. Я пробовал то же самое, но получаю: ОШИБКА — обработано новое глобальное исключение! Сообщение = java.util.LinkedHashMap не может быть преобразовано в java.math. BigInteger java.lang. ClassCastException: java.util.LinkedHashMap не может быть преобразован в java.math. BigInteger
2. Можете ли вы показать весь код? Есть ли какое-нибудь место, где вы объявляете LinkedHashMap ?
3. Список<BigInteger> Идентификаторы пациентов = mapper .readValue(mapper.writeValueAsString(thpResponse.getResponseData()), List.class ); Список<ChatRoomHistory> chatRoomHistory = chatHistoryDAO.getLastChatDetails(идентификаторы пациентов);
4. @Ramanuj это означает, что у вас проблема в json, ваши идентификаторы в
managedAccountsUserIds
узле. Вы можете проверить, работает ваш запрос или нет, сначала передав некоторый постоянный идентификатор в запросе.5. @Ramanuj Смотрите здесь подробности onlinegdb.com/SyM2l0LGP
Ответ №2:
Вы можете исправить свой метод таким образом:
@Override
public List<ChatRoomHistory> getLastChatDetails(List<BigInteger> patientIds)
{
String hql = "select c from ChatRoomHistory c where c.type = 'NO' and c.patientId in :patientIds ORDER BY c.chatCloseTime DESC";
TypedQuery<ChatRoomHistory> query = sessionFactory.getCurrentSession().createQuery(hql, ChatRoomHistory.class);
query.setParameter("patientIds", patientIds);
return query.getResultList();
}
Комментарии:
-
Даже если HQL не требует наличия a
select_clause
, обычно хорошей практикой является его включение. -
Список значений не должен быть пустым; он должен содержать хотя бы одно значение. (Смотрите это).
Комментарии:
1. Список не пуст: но gettign o-8080-exec-2:] c.t.c.u.e.GlobalExceptionHandler.HandleException: ОШИБКА 243 — обработано новое глобальное исключение! Сообщение = java.util.LinkedHashMap не может быть преобразовано в java.math. BigInteger java.lang. ClassCastException: java.util.LinkedHashMap не может быть преобразован в java.math. BigInteger в org.hibernate.type.descriptor.java.BigIntegerTypeDescriptor.unwrap(BigIntegerTypeDescriptor.java:19)
2. Эта трассировка стека каким-то образом связана с выполнением метода
getLastChatDetails
?