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 {
// ...
}
实施的实际验证在哪里?如何扩展以允许管理员覆盖?
虽然这里没有显示,但我已经在这个约束上使用了组用于其他目的。
答案 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,因为这样很容易导航到这种细节。