日语查询参数的标准查询失败
Criteria query fails for query param in Japanese
我正在尝试通过发送日语中的 url 查询参数来获取结果,如下所示。样本 url 是
https://xyz/accounts?name=お金
用日语或其他语言发送查询参数是否遵循惯例。如果是,应在以下代码中进行哪些更改?
下面的代码已经过测试,它适用于英文查询参数值,如 name=data.
此外,如果我对数据库进行查询,它可以很好地工作并返回结果。
select a.id, a.plan, p.name 来自帐户内部连接计划 p on a.plan=p.id where (a.id in (1, 2 , 3)) and p.name='お金' order by 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 启动,我在我的 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
我正在尝试通过发送日语中的 url 查询参数来获取结果,如下所示。样本 url 是 https://xyz/accounts?name=お金
用日语或其他语言发送查询参数是否遵循惯例。如果是,应在以下代码中进行哪些更改? 下面的代码已经过测试,它适用于英文查询参数值,如 name=data.
此外,如果我对数据库进行查询,它可以很好地工作并返回结果。
select a.id, a.plan, p.name 来自帐户内部连接计划 p on a.plan=p.id where (a.id in (1, 2 , 3)) and p.name='お金' order by 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 启动,我在我的 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