我正在使用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>
如何在测试时解决此数据类型问题?
答案 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中提供了删除表架构。
现在工作良好。