@Future的实现在哪里定义?

时间:2012-07-24 05:14:27

标签: java hibernate annotations bean-validation

Java持久性& hibernate可以很容易地向实体添加属性级约束。

@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 {
    // ...
}

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

虽然这里没有显示,但我已经在这个约束上使用了组用于其他目的。

2 个答案:

答案 0 :(得分:2)

hibernate-validator提供的许多验证器的实现:http://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>
  

如何将其扩展为允许管理员覆盖?

最简单的方法是write your own instead

答案 1 :(得分:0)

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

如果由于一些神秘的原因你真的需要改变你的实现中处理Future注释的方式,那么解决方案当然是特定于实现的。假设您使用Hibernate Validator 4.3,验证约束的实际检查发生在:

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