我在独立的 Java 应用程序中使用 EclipseLink 2.5 和 JPA 2.1。
某些字段标有@Basic(optional=false),但即使使用空值,我在提交之前也没有收到任何错误。约束是在数据库上设置的,所以我得到了一个 JDBC 异常。
将 Hibernate Validator 添加到项目并将验证模式设置为回调没有帮助。
只有在字段上使用@NotNull 注释时,我才得到异常:javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'prePersist'. Please refer to embedded ConstraintViolations for details.
这不是很具体,也不会告知问题出在哪里。
我想知道是否有任何方法可以使此消息看起来更健壮:例如未设置字段名称或类似的东西并强制 eclipselink 检查 optional=false。
编辑:我知道 JPA 和 Bean Validation 之间的区别。我正在尝试仅使用 JPA 执行验证,使用 optional=false。据我所知(@Basic(optional = false) vs @Column(nullable = false) in JPA)@Basic(optional=false) 应该在运行时检查,@Column(nullable=false) 应该用于制作列在数据库中不可为空。
我正在寻找一种方法来显示违规行为,而不会到处捕获 ConstraintViolations。