我使用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>
如何在测试时解决此数据类型问题?
如果您没有访问SQL查询中的数据字符串的内容,则可以使用BLOB或BINARY作为HSQLDB中的数据类型。
由于我的生产和测试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。
现在工作得很好。