0

Java 持久性和休眠使向实体添加属性级约束变得容易。

@Entity
@Table(name = "party")
public class PartyEntity {
    @Future
    public DateTime start;
}

javax.validation.constraint.Future注释是在没有特定实现的情况下定义的。

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
public @interface Future {
    // ...
}

实际验证在哪里实施?如何扩展它以允许管理员覆盖?

尽管此处未显示,但我已经在此约束上将组用于其他目的。

4

2 回答 2

2

许多验证器的实现由hibernate-validatorhttp ://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/validator-usingvalidator.html#validator-defineconstraints-builtin

如果您使用的是 Maven,只需将以下依赖项添加到pom.xml文件中:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.0.0.Alpha1</version>
</dependency>

如何扩展它以允许管理员覆盖?

最简单的方法是自己编写

于 2012-07-24T05:43:00.473 回答
0

JSR 303验证与 JPA 没有太多直接关系。当然也可以用它来验证 JPA 实体。实际问题是什么 - 很可能您想遵循 php-coder 的建议并实施新的注释和通过注释使用设置的约束验证。

如果由于某种神秘的原因,您确实必须更改在您的实现中处理 Future 注释的方式,那么解决方案当然是特定于实现的。假设您使用 Hibernate Validator 4.3,验证约束的实际检查发生在:

选择这些实现的方式可能会受到org.hibernate.validator.internal.metadata.core.ConstraintHelper. 我建议将您使用的实现源附加到您的 IDE,因为这样很容易导航到这种细节。

于 2012-07-24T06:11:36.430 回答