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

问题描述 投票:0回答:2

我使用Hibernate和Hikari池持久化CLOB数据。测试时我使用的是HSQL内存数据库。但生产我正在使用其他数据库。 CLOB的java数据类型是HSQL DB的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>

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

hibernate jpa java-ee hsqldb jboss-arquillian
2个回答
0
投票

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


0
投票

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

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"/>

create.sql中提供了所有create table schema,drop.sql中提供了drop table schema。

现在工作得很好。

© www.soinside.com 2019 - 2024. All rights reserved.