2015-05-19 2 views
3

у меня есть очень запутанная проблема ворует много времени:Spring Data JPA JpaRepository.save() не возвращает значения по умолчанию

@Column(name = "created", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable = false, updatable = false) 
@Temporal(TemporalType.TIMESTAMP) 
private Date created; 

Этого код метка время устанавливается в моей Postgres БД, но хранилище возвращающего объект с созданным = null;

Я пробовал несколько аннотаций, как:

@generated

от: Spring Data JPA JpaRepository.save(entity) not returning database default values

Но ничего не работает для меня.

+0

Вы пробовали аннотацию @GeneratedValue? – Kayaman

ответ

4

Сгенерированные значения гарантированно генерируются только во время промывки. Сохранение объекта только делает его «прикрепленным» к контексту персистентности. Таким образом, вы должны явно отключить диспетчер объектов.

Попытайтесь использовать entity.saveAndFlush(), и он должен работать.

+0

спасибо большое! решил это для меня! –

+0

В моем случае у меня есть столбец 'modified_at', а значением по умолчанию является текущее время. Единственное, что сработало для меня, это [@UpdateTimestamp] (https://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/annotations/UpdateTimestamp.html). Мне не нужно было вызывать '.flush()'. Ни [@Generated] (http://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/annotations/Generated.html), либо [@GeneratedValue] (http://docs.oracle. com/javaee/5/api/javax/persistence/GeneratedValue.html) обработанные аннотации, даже после использования '.flush()' поле все равно вернется как null после '.save()'. – Doug

+0

thx Я был подозрительным в отношении транзакции не полностью, так как я пытался создать дату модификации и создания на моем объекте. Но значение, вероятно, вставлено после сохранения объекта. – Alex