validation - 在选择期间绕过 Bean 验证但不在插入/更新期间

标签 validation jakarta-ee jpa-2.0 eclipselink glassfish-3

我正在使用 Glassfish 3.1.1(JSF 2、JPA 2、EclipseLink、Bean 验证)。

我正在尝试使用带有这些注释的 Bean Validation API 来实现验证:@Past@Future@NotNull

它在插入或更新期间工作正常。不幸的是,当我尝试选择具有一些不正确值的 en 实体时,出现以下异常:

[#|2011-12-20T10:18:30.286+0100|WARNING|glassfish3.1.1|javax.enterprise.resource.jta.com.sun.enterprise.transaction|_ThreadID=36;_ThreadName=Thread-2;|DTX5014: Caught exception in beforeCompletion() callback:
javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'preUpdate'. Please refer to embedded ConstraintViolations for details.
    at org.eclipse.persistence.internal.jpa.metadata.listeners.BeanValidationListener.validateOnCallbackEvent(BeanValidationListener.java:90)
    at org.eclipse.persistence.internal.jpa.metadata.listeners.BeanValidationListener.preUpdate(BeanValidationListener.java:72)

我在规范中看到我可以使用此属性 javax.persistence.ValidationMode 禁用 JPA 验证,但是如何在选择期间禁用验证而不是在插入或更新期间禁用

预先感谢您的帮助。

最佳答案

问题是持久性上下文中的任何内容都将被验证。

您可以避免将对象添加到持久性上下文,方法是在事务外的不同 EntityManager 中读取它们,或者在读取它们的查询中使用“eclipselink.read-only”提示。

虽然没有更改的对象正在被验证,但这看起来确实很奇怪。如果是这种情况,那么可能会记录一个错误。

关于validation - 在选择期间绕过 Bean 验证但不在插入/更新期间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8573350/

相关文章:

java - 将 EVENT 范围的 bean 注入(inject)到 CONVERSATION/SESSION 范围的 bean 中是否更安全?

hibernate - .hbm 文件可以在 Hibernate 作为 JPA 提供者的 JPA 应用程序中使用吗?

c# - ASP :RequiredFieldValidator validation based on conditions

jquery - 有JavaScript的代码契约库吗?

javascript - 尝试通过 AJAX 验证 Laravel Form 时出现错误 422

jpa-2.0 - JPQL和CriteriaBuilder之间的where子句的区别

hibernate - JPA 双向关系的优缺点

php - 制作类(class)预订系统PHP

java - servlet的使用比struts2中的action-classes好吗?

java - 多个 GET 方法匹配 : select most specific