我最近更新了我们的项目,从使用Joda时间到Java 8的java.time。
在大多数情况下,这项运动取得了成功;也就是说,它建立!但是,我的一些测试失败了:
javax.validation.UnexpectedTypeException:HV000030:没有验证器可以 找到类型:java.time.LocalDateTime。
我正在使用Hibernate 5.1,Hibernate-Validator 5.2.4,Hibernate-java8版本5.1和Spring版本4.2.0。
我已经看到其他建议说用@NotNull替换@NotEmpty anotation。我已经做到了这一点,但上面仍然遇到同样的问题。
有什么建议吗?缺少依赖(希望!)?
答案 0 :(得分:2)
为了解决这个问题,我从模型中的LocalDateTime对象上面删除了所有注释。例如:
@NotNull
private LocalDateTime dateTime;
到
// @ NotNull - 注释掉以证明删除。你应该删除它。
private LocalDateTime dateTime;
然后我删除了Hibernate使用Joda Time从之前的重建生成的表。
解决方案部分受以下因素的启发: http://www.thoughts-on-java.org/hibernate-5-date-and-time/ 在作者陈述的结论中:
这使得它们比旧的java.util.Date更容易使用,因为您不必添加任何其他注释。
虽然这里有很多值得学习的教训。确保数据库与更新的模型兼容。对于我来说,删除它就足够了,用于单元测试。但是当“现场直播”时数据库需要我更仔细地更新,而不是整个过程!