【问题标题】:Value too long for column - error persisting LocalDate列的值太长 - 错误持续存在 LocalDate
【发布时间】:2018-06-13 15:12:53
【问题描述】:

我在保留 LocalDate 字段时遇到以下错误 [在列中使用 VARCHAR(20) 类型]:

Value too long for column "BIRTH_DATE VARCHAR(20)":"'aced00057372000d6a6176612e74696d652e536572955d84ba1b2248b20c00007870770703000007e2060c78' (88)";

字段定义如下:

@Column(name = "BIRTH_DATE")
private LocalDate date;
@Column(name = "BIRTH_TIME")
private LocalTime time;

我正在使用 spring 数据启动器 (1.5.9.RELEASE)。内部使用hibernate 5.0.12。

根据博文https://www.thoughts-on-java.org/hibernate-5-date-and-time/

Hibernate 5,开箱即用地支持 Java 8 功能(DateTime API)。那么,为什么会出现这个错误。

我已经检查过了,并且正在运行时创建一个有效的 LocalDate 对象。但是在持续存在时会引发错误。这是调用save()之前的调试屏幕截图

如果我将列类型更改为 DATE,错误将变为以下内容:

java.lang.IllegalArgumentException: aced00057372000d6a6176612e74696d652e536572955d84ba1b2248b20c00007870770703000007e2060c78
    at org.h2.util.DateTimeUtils.parseDateValue(DateTimeUtils.java:313) ~[h2-1.4.196.jar:1.4.196]

【问题讨论】:

  • 您的 BIRTH_DATE 列似乎是数据库中的 varchar。你能确认一下吗?
  • 是的。但即使将其更改为日期类型。错误仍然存​​在。

标签: java hibernate date java-8


【解决方案1】:

你遇到的字符串是序列化对象的十六进制表示,可以很容易地验证:

ByteArrayInputStream is = new ByteArrayInputStream(new BigInteger(
    "aced00057372000d6a6176612e74696d652e536572955d84ba1b2248b20c00007870770703000007e2060c78", 16)
      .toByteArray());
is.read();
ObjectInputStream ois = new ObjectInputStream(is);
final Object obj = ois.readObject();
System.out.println(obj+" ("+obj.getClass().getName()+')');
2018-06-12 (java.time.LocalDate)

当然,将LocalDate 存储为这样的 blob 并不是真正支持 DateTime API 的标志,因为这应该是存储值的最后手段。要么没有支持,要么没有正确配置。无论哪种情况,您都必须重新检查环境。

【讨论】:

  • 这确实是正确答案。这里有一个断章取义的问题:我们可以以上述方式验证数据的任何十六进制表示吗?例如,我们可以检索通过 SHA 传递的字符串吗?
  • 不,SHA 提供的哈希值不允许重建原始数据,但可以验证,如果您有原始数据(通过在您的机器上对它们进行哈希并比较哈希值) .我只能将您问题的具体数据识别为序列化数据,因为我之前已经播种了aced 标记,这是ObjectStreamConstants.STREAM_MAGIC 的十六进制表示...
  • 感谢您的信息。并供将来参考:添加 hibernate-java8.jar 依赖项后错误得到解决。所以,这是框架的问题。
  • @Holger 简单的答案!
猜你喜欢
  • 2016-08-09
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 2012-02-11
  • 1970-01-01
  • 2018-11-10
  • 2010-10-22
相关资源
最近更新 更多