Значение слишком длинное для столбца - ошибка сохраняется LocalDate - PullRequest
0 голосов
/ 13 июня 2018

Я получаю следующую ошибку при сохранении поля 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;

Я использую стартер данных весны (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() enter image description here

Ошибка изменится на следующее, если я изменю тип столбца на DATE:

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

1 Ответ

0 голосов
/ 13 июня 2018

Строка, с которой вы столкнулись, представляет собой шестнадцатеричное представление сериализованного объекта, что легко проверяется:

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 как такого большого двоичного объекта непризнак подлинной поддержки API DateTime, поскольку это должно быть последним средством для хранения значения.Либо поддержки нет, либо она не была правильно настроена.В любом случае вам придется перепроверить среду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...