Я пытаюсь получить результат, отправив параметр запроса url на японском языке, как показано ниже. Образец URL-адреса https://xyz/accounts?name=お金Запрос запроса не выполняется для запроса param на японском языке
Применяется ли практика отправки параметров запроса на японском или других языках. Если это будет сделано в следующем коде? Данный код уже был протестирован и работает для значений параметров запроса на английском языке, например name = data.
Кроме того, если я выполняю запрос к базе данных, он отлично работает и возвращает результат.
выберите a.id, a.plan, p.name из учетной записи внутренний план соединения p на a.plan = p.id где (a.id в (1, 2, 3)) и p.name = 'お 金' заказать по p.name asc;
Но при передаче этого значения значения параметра, используя запрос критериев, он просто дает пустой массив.
public List<AccountEntity> createCriteriaQuery(final List<String> accountIdList,
final MultiValueMap<String, String> allRequestParams) {
final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
final CriteriaQuery<AccountEntity> cq = cb.createQuery(AccountEntity.class);
final Root<AccountEntity> accountEntity = cq.from(AccountEntity.class);
final Join<AccountEntity, PlanEntity> account = accountEntity.join(AccountEntity_.planEntity);
final List<Predicate> predicates = new ArrayList<Predicate>();
// Default Predicates for accounts
predicates.add(accountEntity.get(AccountEntity_.id).in(accountIdList));
if (!allRequestParams.isEmpty()) {
if (allRequestParams.containsKey(ApplicationConstants.QUERYPARAM_PLANNAME)) {
final String planName = allRequestParams.get(ApplicationConstants.QUERYPARAM_PLANNAME).get(0);
// For planName we check for "contains" which is sql like query
predicates.add(cb.like(account.get(PlanEntity_.name), "%" + planName + "%"));
}
}
Она добавляется к предикатам, когда я отладки приложения я могу видеть, что его было добавлено точно так же, как, Что было передано в URL, но я предполагаю, что это не может создать запрос по какой-то причине в нижеуказанные шаги. Также, когда я печатаю имя плана, я получаю ??
cq.select(accountEntity).where(predicates.toArray(new Predicate[] {}));
cq.orderBy(cb.asc(account.get(PlanEntity_.name)));
final TypedQuery<AccountEntity> qry = entityManager.createQuery(cq);
final List<AccountEntity> accountEntityList = qry.getResultList();
//So I get accountEntityList as []
entityManager.close();
return accountEntityList;
}
Позвольте мне знать, если мне нужно предоставить какие-либо другие детали.
проверить, поддерживает ли ваше соединение db значения sql в unicode –
@SashaSalauyou Да, он поддерживает значения unicode. – Arun