powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / [Hibernate] Автогенерация даты создания рекорда
3 сообщений из 3, страница 1 из 1
[Hibernate] Автогенерация даты создания рекорда
    #38032602
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то руки не доходили до этого, всегда генерил и заполнял поле сам. Тут решил разобраться.

В основном источники демонстрируют простой и лаконичный вариант:
Код: java
1.
2.
3.
4.
@Column(name = "created", updatable = false, nullable = false)
@Temporal(value = TemporalType.TIMESTAMP)
@Generated(value = GenerationTime.INSERT)
private Date created;



К сожалению, так при создании выпадает исключение о том, что я вставляю NULL-значение. Убирая "nullable = false" (... и надеясь, что это может как-то-там и как-то-так вставит время), просто получаем NULL в рассматриваемом поле.

Замечательным решение выглядит использование аннотации @PrePersist. Однако я использую Session API, а не EntityManager (кажется, так это называется), а заморачиваться с интерцепторами неохота.

При рассмотрении данного вопроса наталкивался на использование аннотации @Version. И хотя в общих чертах понимаю назначение всех используемых аннотаций JPA и Hibernate, но вот то, что все сразу заработало, меня слегка ставит в тупик ...
Код: java
1.
2.
3.
4.
@Version
@Column(name = "created", updatable = false, nullable = false)
@Temporal(value = TemporalType.TIMESTAMP)
private Date created;



В принципе, замечательно работает. Правда, немного омрачает то, что при любом обновлении рекорда Хибер хочет обновить поле created и только атрибут "updatable = false" его сдерживает. Почему заработало, об этом стыдно спрашивать, поэтому не буду (почитаю чуток больше об оптимистических блокировках), а вот почему не работает первый способ? - это вопрос ...
...
Рейтинг: 0 / 0
[Hibernate] Автогенерация даты создания рекорда
    #38032621
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот открыл мануал, почитал про эти аннотации за тебя. Generated нужен когда база данных генерит значения для свойства. Хибер сам его генерить не будет. Т.е. должен быть триггер. Хибер сделает instert и перечитает из записи сгенеренное значение .
Триггера у тебя видать не было?
Оптимистичный же лок реализован самим хибером. Вот он по Version и генерить timestamp.
...
Рейтинг: 0 / 0
[Hibernate] Автогенерация даты создания рекорда
    #38032642
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. 3 десятка слов и сразу все стало понятно, хотя доку я тоже читал ))
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / [Hibernate] Автогенерация даты создания рекорда
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]