我正在尝试让我的应用程序在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
我怎样才能让它兼顾?
答案 0 :(得分:5)
我遇到了同样的问题。我使用@Lob
注释解决了它。这可以在 mysql 表中使用LONGTEXT
进行验证。在内存中使用 H2 时,会创建一个CLOB
字段。
import javax.persistence.Lob;
...
@Lob
private String lotsOfText;
答案 1 :(得分:0)
这是orm.xml
的原因之一,因此您可以为一个数据存储区创建一个映射,为不同的数据存储区创建一个映射,因此无需在运行之间重新编译代码