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 中两个不同表的外键