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

Posted

技术标签:

【中文标题】JPA Entity CLOB 列用于测试的不同数据类型【英文标题】:JPA Entity CLOB column different data type for testing 【发布时间】:2019-02-28 04:07:37 【问题描述】:

我正在使用 Hibernate 和 Hikari 池保存 CLOB 数据。在测试时,我使用的是 HSQL 内存数据库。但是生产我正在使用其他数据库。 CLOB 的 java 数据类型是 HSQL DB 的 String。但我的真实环境数据库数据类型是字节[]。我正在使用 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>

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

我创建了不同的数据类型(二进制)来测试数据库(HSQL 数据库),并按照我的回答中提到的步骤进行操作。谢谢你的回答。【参考方案2】:

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

create.sql

创建表文章(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"/>

create.sql 中提供了所有创建表模式,drop.sql 中提供了删除表模式。

现在工作得很好。

【讨论】:

以上是关于JPA Entity CLOB 列用于测试的不同数据类型的主要内容,如果未能解决你的问题,请参考以下文章

一列用于 Entity Framework Core 中两个不同表的外键

在 Oracle 上休眠:将字符串属性映射到 CLOB 列

Hibernate JPA H2 问题中的“限制”列

带有 JPA 的 Spring Boot:将 @Entity 移动到不同的包

jdbc—CLOB和BLOB

CLOB 列和 SQL 插入文件