我在spring-boot 2.0.6和hibernate 5.2.17中使用Web服务。当我使用@ CreationTimestamp,@ Column(nullable = false)和@Temporal(TemporalType.TIMESTAMP)的createTime字段保存对象时,出现异常org.hibernate.PropertyValueException:not-null属性引用了null或瞬态值: com.ex.Entity.createTime。但是在另一个服务(spring-boot 1.5.6和hibernate 5.0.12)中,没有发生此问题。
所以我通过调试逐步调试了它,最后发现当休眠状态使用@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 :(得分:0)
我遇到了完全相同的问题,当我添加时它会有所帮助
testImplementation("org.springframework.boot:spring-boot-starter-web")
依赖我的项目。您可能希望它在测试或编译范围内。