为什么这个值太长了我的H2表

时间:2014-06-13 21:58:03

标签: hibernate h2 spring-data-jpa

我有一个使用H2存储的spring-data-jpa应用程序。当我尝试将一些数据解析到表中时,我收到一个错误:

 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'."

我能想到的是,分号或其他一些无效字符会抛出此异常。

有人可以在这里看到问题,并提出处理它的替代方法吗?

1 个答案:

答案 0 :(得分:4)

您陈述的表格定义:

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注释。您可能还需要在remarks字段上添加注释,将其标识为CLOB