【发布时间】:2019-05-05 16:18:18
【问题描述】:
我正在使用 mysql 数据库和 Spring Data,我有一个这样定义的列:
@Lob
@Column(length = 1000)
private String messageContent;
此列用于存储大字符串。它与 mysql 一起工作得很好,但对于单元测试,我使用的是 H2 数据库。看起来 H2 忽略了 @Lob 注释,我得到:
Caused by: java.sql.SQLDataException: data exception: string data, right truncation; table: MESSAGE column: MESSAGE_CONTENT
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114)
at com.sun.proxy.$Proxy189.executeUpdate(Unknown Source)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204)
... 147 common frames omitted
Caused by: org.hsqldb.HsqlException: data exception: string data, right truncation; table: MESSAGE column: MESSAGE_CONTENT
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.Table.enforceTypeLimits(Unknown Source)
at org.hsqldb.Table.generateAndCheckData(Unknown Source)
at org.hsqldb.Table.insertSingleRow(Unknown Source)
at org.hsqldb.StatementDML.insertRowSet(Unknown Source)
at org.hsqldb.StatementInsert.getResult(Unknown Source)
at org.hsqldb.StatementDMQL.execute(Unknown Source)
at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 156 common frames omitted
我无法更改列定义,H2 仅用于测试用例。我正在考虑通过执行 ALTER TABLE 语句手动更改列类型,但也许有更好的解决方法?
【问题讨论】:
-
我认为您在测试中插入的内容比列定义长。尝试删除长度并重复测试以查看默认值(应该是最大长度)是否有效。
-
您的 H2 架构是如何生成和应用的?
-
感谢 cmets,模式是自动创建的:hibernate.ddl-auto=update
-
另外,你能告诉我们你的测试课吗?对你有帮助。
-
看起来是@Column(length = 1000) 的问题,内容较长。谢谢!
标签: java spring-data h2