У меня есть объект User
, который я обновляю.Данные были обновлены, и даже обновленный ответ возвращается методом spring-data-jpa
save
, но created
и updated
равны нулю.Я проверил это в базе данных и там значение столбца updated
обновляется.Кроме того, после обновления я получил данные одним из методов find
по spring-data-jpa
и получил правильный результат.created
и updated
не равны нулю на этот раз.
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
@Column(name = "created", updatable = false, nullable = false)
@CreationTimestamp
@JsonSerialize(using = LocalDateTimeSerializer.class) @JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime created;
@Column(name = "updated")
@UpdateTimestamp
@JsonSerialize(using = LocalDateTimeSerializer.class) @JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime updated;
Я не могу винить метод save
, так как он возвращает мне обновленное значение другого поля.В работе @UpdateTimestamp
и @CreationTimestamp
может быть что-то подозрительное или с его совместимостью с spring-data-jpa
Я не уверен, хотя.
Одно быстрое наблюдение с spring-data-jpa
: если я использую saveAndFlush
вместо save
я получаю updated
в качестве допустимого значения, но created
по-прежнему равно нулю.Вот скриншоты отладки:
Я использую Hibernate
в качестве реализации JPA
.
public interface CompanyDao extends CrudRepository<Company, Integer> { }
public User update(Integer userId, User user) {
User existingUser = userDao.findById(userId).orElseThrow(() -> new ResourceNotFoundException("User not found"));
user.setCompany(existingUser.getCompany());
User updatedUser = userDao.save(user);
return updatedUser;
}