Поле даты с 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")
зависимость в моем проекте. Возможно, вы захотите использовать его для тестирования или компиляции.