gpt4 book ai didi

java - JPA2 数据验证详细日志记录

转载 作者:行者123 更新时间:2023-12-01 14:08:39 26 4
gpt4 key购买 nike

我在独立的 java 应用程序中使用 EclipseLink 2.5 和 JPA 2.1。

某些字段标有@Basic(可选= false),但即使使用空值,我在提交之前也没有收到任何错误。约束是在数据库上设置的,所以我得到了 JDBC 异常。

将 Hibernate Validator 添加到项目并将验证模式设置为回调没有帮助。

仅在字段上使用 @NotNull 注释时,我遇到异常:javax.validation.ConstraintViolationException:在回调事件上执行自动 Bean 验证时违反了 Bean 验证约束:'prePersist'。详细信息请参阅嵌入的 ConstraintViolations。 这不是很具体,也没有告知问题出在哪里。

我想知道是否有任何方法可以使此消息看起来更健壮:例如未设置字段名称或类似的内容,并强制 eclipselink 检查可选= false。

编辑:我知道 JPA 和 Bean Validation 之间的区别。我尝试仅使用 JPA 执行验证,使用 option=false。据我所知( @Basic(optional = false) vs @Column(nullable = false) in JPA )@Basic(可选= false)应该在运行时检查,并且@Column(nullable = false)应该用于使数据库中的列不可为空。

我正在寻找一种方法来显示违规行为,而无需到处捕获 ConstraintViolations。

最佳答案

这里有几件事。首先必须区分 JPA 和 Bean Validation。两种不同的规范和东西。 @Basic 是 JPA 注释,而 @NotNull 是 Bean Validation 注释。使用 @Basic(Optional=false) 与模式创建结合使用,您确实会得到一个数据库约束,这反过来会在持久化过程中导致 JDBC 异常。

通过引入 Bean Validation,您可以激活 Bean Validation 的 JPA 集成。在这种情况下,在写入数据库之前,数据将通过 Bean Validation 进行验证。在这种情况下作为预持久的一部分。根据规范,在这种情况下会抛出 ConstraintViolationException。您可以调用 ConstraintViolationException.getConstraintViolations 来获取一组失败的约束。由您来捕获此异常并自行解包。

关于java - JPA2 数据验证详细日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18707755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com