CITEXT:我应该使用哪种解决方案进行JPA测试?

时间:2017-07-22 12:26:32

标签: java postgresql hibernate jpa hsqldb

我需要使用psql

使用citextJUnit hsqldb进行测试

第1步

使用liquibase设置psql - 方言为hsqldb

<changeSet id="5" author="ustimenko" context="QA">
    <comment>Modify test database to be case insensitive</comment>

    <sql>
        SET DATABASE SQL SYNTAX PGS TRUE;
        SET DATABASE COLLATION SQL_TEXT_UCC;
    </sql>
</changeSet>

第2步

通过JPA更改列定义

@Column(columnDefinition = "citext")
private String email;

第3步

Caused by: java.sql.SQLSyntaxErrorException: type not found or user lacks privilege: CITEXT
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.executeUpdate(Unknown Source)
    at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:56)
    ... 79 common frames omitted
Caused by: org.hsqldb.HsqlException: type not found or user lacks privilege: CITEXT
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.ParserDQL.readTypeDefinition(Unknown Source)
    at org.hsqldb.ParserTable.readColumnDefinitionOrNull(Unknown Source)
    at org.hsqldb.ParserTable.readTableContentsSource(Unknown Source)
    at org.hsqldb.ParserTable.compileCreateTableBody(Unknown Source)
    at org.hsqldb.ParserTable.compileCreateTable(Unknown Source)
    at org.hsqldb.ParserDDL.compileCreate(Unknown Source)
    at org.hsqldb.ParserCommand.compilePart(Unknown Source)
    at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
    at org.hsqldb.Session.executeDirectStatement(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    ... 82 common frames omitted

我尝试应用了一些解决方案

解决方案1 ​​

jdbc:hsqldb:mem:test;sql.live_object=true作为数据库的网址
得到相同的结果

解决方案2

SET DATABASE LIVE OBJECTliquibase变更集的一部分 在LIVE关键字处出现语法错误。我通过inmemory hsqldb控制台确定了它。但是,当citext字段类型的alter table更改为VARCHAR(3***)

解决方案3

尝试为我的生产数据源添加jdbc:postgresql://localhost/test?stringtype=unspecified,但结果相同

解决方案4

使用ddl-auto进行游戏,但不需要任何结果。

请你解释一下我应该怎么做?我不想使用单独的psql数据库进行测试。是否有任何解决方案可以在内存中使用来解决我的问题?

1 个答案:

答案 0 :(得分:0)

您希望使用CITEX数据类型(不区分大小写的字符串类型)使用PostgreSQL区分大小写的比较。 HSQLDB使用排序规则,可以应用于整个数据库或特定的用户定义类型。按如下所示定义CITEX类型,使用此类型选择列的最大字符大小。

CREATE TYPE CITEX AS VARCHAR(200) COLLATE SQL_TEXT_UCC