1

我正在使用 spring 和 hibernate 执行 JUnit 测试。当我在我的 PC 上使用 MySql 数据库时,它工作正常。为了在任何环境中启动此测试,我设置了一个虚拟数据库:hsqldb。我从 import.sql 文件中插入数据。这是我的配置:

enter code here

和persistence.xml:

<properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
        <property name="hibernate.hbm2ddl.auto" value="create" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" />
    </properties>

因此,当我启动测试类时,数据(在 import.sql 文件中)被插入数据库并运行测试。我的问题是我有一些未插入数据库的十六进制值,我不知道为什么。这是 import.sql 中十六进制数据的示例:

INSERT INTO rejeu_commande_xml (order_id, compressed_request) VALUES (10000108000000001, 0x777d010078daed5ddd72e336967e15962f2649cdb8c57f8a1e4513b57e1cd54896cb523b99dca8281292b14d910a49b9edbdda9ad9a7d8abad5c6db6e6729f60f2267992054052a2fe2c9222a91fa32fda220102e4013ee07c07070795bfbc4c4de619382eb4ad6fafb80fec15032cdd36a035f9f6ead3a0755dbe625c4fb30ccdb42df0edd52b70affe52ad582e7fa33b40f3407dee7af614383dc7000e834ab3dc6faf9e3c6f76532a7df9f2e583ed68d6047cd0ed694977a6577e8e1bf4fc1bb94a8ffc55b5a26b1eaa74f200c6c001960735b3dda8f67bad41a5b435a9025e3ce058e4b720b4af454d1a09222b5e6bec98bd1601e0ae476259be56479a2e0a92381ae94aa51479a8a2cf1d549cfe5ab70d506d7e7a401545ef54c817234135d077577996e3af59fe9ae706ac74c3cb3792fc4151843fb2dc0dcba227a3792b0698);

此数据在我的 MySql 数据库中定义为 LONGBLOB,我认为 HSQLDB 不支持此类型。

我如何插入这些数据以便从我的测试类中获取它?

非常感谢你!金黄色葡萄球菌

4

1 回答 1

3

HSQLDB 的十六进制值的格式需要在十六进制字符串周围加上单引号。下面的两个示例都应该有效。

INSERT INTO rejeu_commande_xml (order_id, compressed_request) VALUES (10000108000000001, x'777d010078da')
INSERT INTO rejeu_commande_xml (order_id, compressed_request) VALUES (10000108000000001, '777d010078da')

Hibernate 应该对 HSQLDB 数据类型使用 LONGVARBINARY、VARBINARY 或 BLOB,而不是 LONGBLOB。

于 2012-03-03T11:16:55.320 回答