Hibernate 为什么这个值对于我的H2表太长

Hibernate 为什么这个值对于我的H2表太长,hibernate,h2,spring-data-jpa,Hibernate,H2,Spring Data Jpa,我有一个SpringDataJPA应用程序,它使用H2进行存储。当我尝试将一些数据解析到表中时,我得到一个错误: o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 22001, SQLState: 22001 2014-06-13 15:42:07.062 ERROR 66742 --- [nio-9001-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : Value too long

我有一个SpringDataJPA应用程序,它使用H2进行存储。当我尝试将一些数据解析到表中时,我得到一个错误:

 o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 22001, SQLState: 22001
2014-06-13 15:42:07.062 ERROR 66742 --- [nio-9001-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : Value too long for column "REMARKS VARCHAR(255)": "'""DOB 31 Jan 1939; Cedula No. 6068015 (Colombia); alt. Cedula No. 6067015 (Colombia); Passport T321642 (Colombia); alt. Passport... (259)"; SQL statement:
insert into sdn (call_sign, grt, program, remarks, sdn_num, sdn_type, title, tonnage, vess_flag, vess_owner, vess_type, ent_num) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [22001-172]
我有一个表定义为:

CREATE TABLE IF NOT EXISTS Sdn (
  entNum    BIGINT (11) NOT NULL,
  sdnName   VARCHAR(700)  NULL,
  sdnType   VARCHAR(24)   NULL,
  program   VARCHAR(100)  NULL,
  title     VARCHAR(4000) NULL,
  callSign  VARCHAR(20)   NULL,
  vessType  VARCHAR(50)   NULL,
  tonnage   VARCHAR(30)   NULL,
  grt       VARCHAR(20)   NULL,
  vessFlag  VARCHAR(80)   NULL,
  vessOwner VARCHAR(300)  NULL,
  remarks   CLOB          NULL,
  UNIQUE KEY entityNum(entNum)
);
我的@Entity类为:

@Entity
public class Sdn {

    @Id
    private long entNum;
    private String sdnName;
    private String sdnType;
    private String program;
    private String title;
    private String callSign;
    private String vessType;
    private String tonnage;
    private String grt;
    private String vessFlag;
    private String vessOwner;
    private String remarks;
以下是违规记录,明显小到可以放入该列:

"DOB 31 Jan 1939; Cedula No. 9876543 (cccccccc); alt. Cedula No. 6067015 (cccccccc); Passport T123456 (cccccccc); alt. Passport 1234567 (Comoros); alt. Passport 12345 (Argentina); alt. Passport 87654321 (ppppppppp); a.k.a. 'THE TTTT PLAYER'; a.k.a. 'NAME1'."
我所能想到的是,分号或其他一些无效字符引发了这个异常


有人能看到这里的问题,并提出处理问题的替代方案吗?

您所述的表定义:

CREATE TABLE IF NOT EXISTS Sdn (
  entNum    BIGINT (11) NOT NULL,
  sdnName   VARCHAR(700)  NULL,
  sdnType   VARCHAR(24)   NULL,
  program   VARCHAR(100)  NULL,
  title     VARCHAR(4000) NULL,
  callSign  VARCHAR(20)   NULL,
  vessType  VARCHAR(50)   NULL,
  tonnage   VARCHAR(30)   NULL,
  grt       VARCHAR(20)   NULL,
  vessFlag  VARCHAR(80)   NULL,
  vessOwner VARCHAR(300)  NULL,
  remarks   CLOB          NULL,
  UNIQUE KEY entityNum(entNum)
);
不同意错误消息,该消息表示备注列是
VARCHAR(255)
而不是
CLOB

并且您的值不超过255个字符的限制

您可能需要更改表格以匹配您认为的内容


您的实体似乎没有定义列类型的JPA或Hibernate注释。您可能还需要在
备注
字段中添加注释,将其标识为字符串的
CLOB

strlen()(包括开头/结尾的
)显示为258个字符长。因此,是的,DB是正确的,您将大象推入了老鼠洞。谢谢,我将实体更改为映射为“@Column”(name=“备注”)@Lob private String comments;”这就解决了问题。关于255的错误代码让我感到不舒服,所以我忽略了它,并使用我的注释来明确说明。我必须添加什么注释来定义此字段定义图像?谢谢。在实体字段上添加@Lob修复了这个问题