Я использую веб-сервисы с 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.Есть ли лучший способ решить это как аннотация?