Поле даты с CreationTimestamp throw PropertyValueException: свойство not-null ссылается на нулевое или временное значение

Я использую веб-сервисы с Spring-Boot 2.0.6 и Hibernate 5.2.17. Когда я сохраняю объект с полем createTime из @CreationTimestamp, @Column(nullable = false) и @Temporal(TemporalType.TIMESTAMP), я получаю исключение org.hibernate.PropertyValueException: свойство not-null ссылается на нулевое или временное значение: com.ex.Entity.createTime. Но в другом сервисе (spring-boot 1.5.6 и hibernate 5.0.12) этой проблемы не возникало.

Таким образом, я отлаживал его шаг за шагом и наконец обнаружил, что когда hibernate проверил поле с помощью @Column (nullable = false)

org.hibernate.engine.internal.Nullability#checkNullability(Object[] values, EntityPersister persister, boolean isUpdate)

переменная Nullability#checkNullability имеет значение true в старшей версии, а младшая - false.

@Table(name = "t_entity")
@Entity
class Entity{
  @Id
  @GenericGenerator(name = "system-uuid", strategy = "uuid")
  @GeneratedValue(generator = "system-uuid")
  @BeanProperty
  var id: String = _

  @CreationTimestamp
  @Temporal(TemporalType.TIMESTAMP)
  @Column(nullable = false, updatable = false)
  @BeanProperty
  var createTime: Date = _

  //other fields are ignored
}


trait EntityRepository extends JpaRepository[Entity, String] 
  with QuerydslPredicateExecutor[Entity] {
}

Я знаю, что изменение версии (я не могу) или установка значения createTime (глупо) может решить эту проблему, и я думаю, что java и scala мало влияют на эту проблему, поэтому пример кода - scala. Есть ли лучший способ решить это как аннотация?

0 ответов

У меня была точно такая же проблема, помогло, когда я добавил testImplementation("org.springframework.boot:spring-boot-starter-web")зависимость в моем проекте. Возможно, вы захотите использовать его для тестирования или компиляции.

Другие вопросы по тегам