gpt4 book ai didi

java - 引文 : which solution I should use for tests with JPA?

转载 作者:行者123 更新时间:2023-11-29 12:25:00 26 4
gpt4 key购买 nike

我需要使用 hsqldb 使用 JUnit 测试 psql citext

第一步

使用liquibase设置psql-dialect to 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>

第二步

通过 JPA 更改列定义

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

第三步

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

我尝试应用一些解决方案

方案一

jdbc:hsqldb:mem:test;sql.live_object=true 作为数据库的 url
有相同的结果

解决方案2

SET DATABASE LIVE OBJECT 作为 liquibase 变更集的一部分LIVE 关键字有语法错误。我通过内存 hsqldb 控制台确保了它。但是当 alter table with citext 字段类型更改为 VARCHAR(3***)

方案三

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

解决方案4

ddl-auto,但没有需要的结果。

你能解释一下我应该做什么吗?我不想使用单独的 psql 数据库进行测试。有什么解决方案可以使用内存来解决我的问题吗?

最佳答案

您想使用PostgreSQL 不区分大小写的比较使用CITEX 数据类型,它是不区分大小写的字符串类型。 HSQLDB 使用排序规则,它可以应用于整个数据库或特定的用户定义类型。如下定义 CITEX 类型,选择使用该类型的列的最大字符大小。

CREATE TYPE CITEX AS VARCHAR(200) COLLATE SQL_TEXT_UCC

关于java - 引文 : which solution I should use for tests with JPA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45254540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com