java - 日语查询参数的条件查询失败

标签 java hibernate rest spring-data-jpa criteria-api

我试图通过发送日语的 url 查询参数来获取结果,如下所示。示例网址是 https://xyz/accounts?name=お金

是否遵循以日语或其他语言发送查询参数的做法。如果是下面的代码应该做哪些修改? 下面的代码已经过测试,它适用于英文查询参数值,如 name=data。

另外,如果我对数据库进行查询,它工作得很好并返回结果。

从帐户a.plan=p.id上的内部联接计划p中选择a.id、a.plan、p.name,其中(a.id in (1, 2 , 3)) and 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 中传递的内容完全相同,但我猜它由于某种原因在以下步骤中无法创建查询。 此外,当我打印 planName 时,我得到了 ??

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;
            }

如果我需要提供任何其他详细信息,请告诉我。

最佳答案

这解决了这个问题。我们正在使用 Spring boot,我在 application.yml 文件中添加了这个(?useUnicode = yes&characterEncoding = UTF-8)并且它起作用了。

Spring :

datasource:

    url:jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8

如果你有 application.properties 那么,

spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8

关于java - 日语查询参数的条件查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36412577/

相关文章:

java - 需要用hibernate dao实现方法保存两个来自不同jsp页面的有外键关系的表

hibernate - 将dynamicUpdate设置为true的Grails Gorm beforeUpdate行为

java - 如何通过 Rest API 发送 JSONArray

rest - 连接到 Paypal Rest Api 以获得用户同意

java - 关系 OneToOne 的 PSQLException : relation "car_model" does not exist

java - Spring Java Rest处理反序列化时的无效类型

java - android studio 的问题

java - MapStruct 正在将所有 boolean 值映射为 false

java - 无需任何数学运算即可使用双基数和整数指数求幂。 Java 中的库

java - 寻找具有多个键的可索引、自排序数据结构