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

时间:2019-02-28 04:07:38

标签: hibernate jpa java-ee hsqldb jboss-arquillian

我正在使用Hibernate和Hikari池持久存储CLOB数据。测试时,我正在使用HSQL内存数据库。但是生产中我正在使用其他数据库。对于HSQL DB,CLOB的Java数据类型为String。但是我的实际环境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>

如何在测试时解决此数据类型问题?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

create.sql

  

创建表格文章(id整数,数据二进制(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中提供了删除表架构。

现在工作良好。