支持JPA条件API中的排序规则

6uxekuva  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(112)

我需要在搜索查询中添加“COLLATE”,以便根据用户的语言对数据进行排序;我正在使用JPA/Hibernate和HSQLDB。但是,我没有找到任何直接的选项来使用API向查询添加“COLLATE”支持。一种可能的方法是将TypedQuerytoHibernate查询展开,获取查询字符串,显式修改并重新构建TypedQuery。我想知道是否有其他更干净的方法可以在不偏离Criteria API的情况下实现相同的功能。例如,我想生成以下SQL查询:

选择 * 从客户订单按名称排序“中文”

9gm1akwq

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>

相关问题