我需要在搜索查询中添加“COLLATE”,以便根据用户的语言对数据进行排序;我正在使用JPA/Hibernate和HSQLDB。但是,我没有找到任何直接的选项来使用API向查询添加“COLLATE”支持。一种可能的方法是将TypedQuerytoHibernate查询展开,获取查询字符串,显式修改并重新构建TypedQuery。我想知道是否有其他更干净的方法可以在不偏离Criteria API的情况下实现相同的功能。例如,我想生成以下SQL查询:
选择 * 从客户订单按名称排序“中文”
9gm1akwq1#
下面是整理到JPA条件查询中的示例。使用MySQL DB:
private Predicate predicateOfString(String criteria, Path<String> fieldPath) { return getCriteriaBuilder().like( getCriteriaBuilder().function("collate_ai_ci", String.class, fieldPath), "%" + criteria + "%" ); }
当然,表(或列)需要显式创建与COLLATE关键字。例如liquibase脚本(生成mysql代码):
<sql dbms="mysql"> CREATE TABLE configuration ( id BIGINT auto_increment NOT NULL, config_key varchar(100) NULL, config_value varchar(100) NULL, primary key (id), unique key uk_configuration (config_key) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_as_cs; </sql>
1条答案
按热度按时间9gm1akwq1#
下面是整理到JPA条件查询中的示例。使用MySQL DB:
当然,表(或列)需要显式创建与COLLATE关键字。例如liquibase脚本(生成mysql代码):