MySQL LONGTEXT带有h2嵌入式数据库

时间:2015-05-20 11:31:24

标签: java mysql jpa h2

我正在尝试让我的应用程序在MySQL(用于生产)和H2(用于开发/测试)上运行。我的(Flyway)脚本现在几乎完全相同,除了需要为MySQL声明'LONGTEXT'的列。如果我也将它用于H2(在MySQL兼容模式下运行),我得到:

Wrong column type in public.public.customer_license for column license.
Found: clob, expected: varchar(65535)

我的实体的Java代码:

@Column(name = "license", length = 65535)
private String m_license;

如果我将列声明更改为VARCHAR(65535),那么它适用于H2,但不适用于MySQL:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Column length too big for column 'license' 
(max = 21845); use BLOB or TEXT instead

我怎样才能让它兼顾?

2 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。我使用@Lob注释解决了它。这可以在 mysql 表中使用LONGTEXT进行验证。在内存中使用 H2 时,会创建一个CLOB字段。

import javax.persistence.Lob;

...

@Lob
private String lotsOfText;

答案 1 :(得分:0)

这是orm.xml的原因之一,因此您可以为一个数据存储区创建一个映射,为不同的数据存储区创建一个映射,因此无需在运行之间重新编译代码