@CreateTimestamp, @UpdateTimestamp. Почему поле "создать" пустое для возвращаемого объекта? - PullRequest
1 голос
/ 16 октября 2019

У меня есть 2 поля: создать и обновить.

@CreateTimestamp
@Column(nullable = false, updatable = false)
private Timestamp create;

@UpdateTimestamp
@Column(nullable = false)
private Timestamp update;

После создания объекта: все в порядке. Но при выполнении обновления объекта я получаю для возвращаемого объекта поле «создать», равное нулю. В БД объект сохраняется корректно с заполненными полями. Как это можно исправить?

Полный код класса:

@Entity
@Table(name = "user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String id;

    @Column(nullable = false, unique = true)
    private String name;

    @Column(nullable = false)
    private String password;

    @CreateTimestamp
    @Column(nullable = false, updatable = false)
    private Timestamp create;

    @UpdateTimestamp
    @Column(nullable = false)
    private Timestamp update;
}

Обновление метода:

public UserEntity update(UserEntity user, String id) {
     UserEntity userFromDB = userDao.findById(id);
     UserEntity updatedUser = userDao.save(userFromDB);
     return updatedUser;
}

При возвращении updatedUser поле create равно нулю.

Ответы [ 3 ]

0 голосов
/ 16 октября 2019

Попробуйте использовать org.hibernate.annotations.CreationTimestamp в качестве Anotation и

java.util.Date.

@Entity
@Table(name = "user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private String id;

    @Column(nullable = false, unique = true)
    private String name;

    @Column(nullable = false)
    private String password;

    @CreationTimestamp
    @Column(nullable = false, updatable = false)
    private Date create;

    @UpdateTimestamp
    @Column(nullable = false)
    private Date update;
}
0 голосов
/ 16 октября 2019

Неясно, куда вы импортировали @CreateTimestamp и @UpdateTimestamp из.

Однако, поскольку вы, кажется, используете Spring, вы можете использовать @CreatedDate и @LastModifiedDate из данных Spring. И убедитесь, что ваша сущность аннотирована @EntityListeners(AuditingEntityListener.class).

Кроме этого, начиная с Java 8, с введением нового Дата и время API , вы должны избегать использования Date и связанные с ними классы, такие как Timestamp. Подходящая замена для Timestamp, в вашей ситуации, будет Instant или OffsetDateTime.

0 голосов
/ 16 октября 2019

Кажется, есть проблема в преобразовании метки времени из значений, хранящихся в базе данных.

  • Если вы не заинтересованы в этом, я бы предложил вам использовать дату вместо отметки времени в классе модели.

  • Поскольку вы не упомянули схему вашей базы данных, вы можете проверить, совпадают ли имена столбцов в модели с именами в базе данных

  • Если вы не используете метод SaveOrUpdate или метод обновления для обновления в базе данных

  • Используйте критерии для выборки записей, как показано ниже, и используйте ограничения при необходимости

    Критерии критериев = getSession (). CreateCriteria (PatientPanel.class);crit.add (Restrictions.eq ("datasourceId", dataSourceId));

Этот поток похож на: Springboot + MySQL: не может прочитать любой тип даты из (DATE,DATETIME, TIMESTAMP) MySQL

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