java - 带有 h2 嵌入式数据库的 MySQL LONGTEXT

标签 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

如何让它同时适用于两者?

最佳答案

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

import javax.persistence.Lob;

...

@Lob
private String lotsOfText;

关于java - 带有 h2 嵌入式数据库的 MySQL LONGTEXT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30348418/

相关文章:

java - Maven 重新导入设置语言级别

java - 没有 xml 的 textview 可点击

java - Hibernate 给出 org.hibernate.NonUniqueObjectException 并将过时的对象保存到数据库

mysql - 在命令行上优雅地终止mysqld?

hibernate - 在双向多对一关系中从非所有者方更新实体

mysql - Spring Boot JPA with MySql DB - 映射日期以错误的一天结束(休息 1 天)

java - 如何遍历图 "forwards"和 "backwards"?

从表单值生成 php mysql 更新语句

MYSQL:如何创建一个触发器来根据来自不同表的值计算字段值?

java - JPA:空值是如何排序的?