Поле для временной метки обновления установлено вместо временной метки создания

avatar
michael.k
1 июля 2021 в 20:45
35
0
0

В настоящее время я столкнулся с проблемой в Hibernate, когда метка времени создания объекта не устанавливается при первом сохранении, а метка времени обновления. Поскольку обе временные метки определены как не допускающие значения NULL, я столкнулся с исключением.

Вот что я делаю с сущностью:

Session session = ...;
Transaction transaction = session.beginTransaction();
MyEntity entity = new MyEntity();
session.save(entity); // save entity to get the ID
... set the ID on some other entities ...
session.save(otherEntity);
entity.modifySomething();
session.update(entity); // it actually doesn't matter if I do this call or not
transaction.commit();

Класс объекта выглядит следующим образом:

@Data
@NoArgsConstructor
@Entity
public class MyEntity
{
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "lexeme_seq")
    @SequenceGenerator(name = "lexeme_seq", sequenceName = "lexeme_seq", allocationSize = 10)
    private Long id;

    @CreationTimestamp
    @Column(nullable = false)
    private Instant createdAt;

    @UpdateTimestamp
    @Column(nullable = false)
    private Instant updatedAt;

...

Я уже много гуглил и искал на coderhelper, но не смог найти по этой теме. Я хочу, чтобы отметка времени создания также была заполнена (здесь я не возражаю против отметки времени обновления), но я также хочу, чтобы все было в одной транзакции.

Есть идеи?

Источник
michael.k
2 июля 2021 в 16:45
0

Ну, я не знаю, почему это так, но как только я определил столбец createdAt как @Column(nullable = false, updateable = false), он работает нормально.

Ответы (0)