JPA 实体 CLOB 列用于测试的不同数据类型

JPA Entity CLOB column different data type for testing

我正在使用 Hibernate 和 Hikari 池持久化 CLOB 数据。测试时我正在使用 HSQL 内存数据库。但是生产我正在使用其他数据库。 CLOB 的 java 数据类型是 HSQL DB 的字符串。但我的真实环境 DB 数据类型是 byte[]。我正在使用 Arquillian 进行测试。

如何使用 byte[] 数据类型进行主编码,使用字符串数据类型进行测试?

我试过 Alternative,但它不起作用,我也试过 Specializes,但不走运。

@Entity
class Article {
   @Id
   private long id;
    @Lob
    @Column(name="data", columnDefinition = "CLOB")
    private byte[] data;

}

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.3.7.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-hikaricp</artifactId>
            <version>5.3.7.Final</version>
        </dependency>

测试时如何解决这个数据类型问题?

如果您不访问 SQL 查询中的数据字符串的内容,您可以使用 BLOB 或 BINARY 作为 HSQLDB 中的数据类型。

由于我的生产数据库和测试数据库不同,并且 Java 面临的 CLOB 数据类型在两个数据库中都不同。

create.sql

create table article (id integer,data binary(500));

我创建了不同的测试模式并通过 persistence.xml 加载了这些模式。我在 persistence.xml 中做了以下配置以单独测试。

    <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
    <property name="javax.persistence.schema-generation.create-source" value="script"/>
    <property name="javax.persistence.schema-generation.create-script-source" value="schema/create.sql"/>
    <property name="javax.persistence.schema-generation.drop-source" value="script"/>
    <property name="javax.persistence.schema-generation.drop-script-source" value="schema/drop.sql"/>

所有创建 table 架构在 create.sql 中可用,删除 table 架构在 drop.sql 中可用。

现在工作很好。