首页 > 解决方案 > 使用 org.hibernate.validator.internal.cfg.context 在方法上创建约束

问题描述

我目前正在重构一段代码,因为看起来 hibernate 的人在版本兼容性方面的记录很差。

我们hibernate-validator-5.0.2.Final最初使用的是,我必须将其升级到hibernate-validator-6.0.16.Final. 公共课程,例如:ConfiguredConstraint.java已更改为非公共课程,现在它们似乎不再起作用了!

我可以看到引入了很多新方法和类,但有点坚持使用。

我需要创建约束method,现在有 N 种方法,我无法确定从这个包中使用哪一种:org.hibernate.validator.internal.cfg.context

我知道这是一个非常抽象的信息,但如果有人知道如何处理并在高层次上实施,将不胜感激!

TIA

标签: javahibernatehibernate-validator

解决方案


你不应该直接使用internal包装中的东西。

请参阅https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-programmatic-api的示例 12.8 。

HibernateValidatorConfiguration configuration = Validation
        .byProvider( HibernateValidator.class )
        .configure();

ConstraintMapping constraintMapping = configuration.createConstraintMapping();

constraintMapping
    .type( Car.class )
        .constructor( String.class )
            .parameter( 0 )
                .constraint( new SizeDef().min( 3 ).max( 50 ) )
            .returnValue()
                .valid()
        .method( "drive", int.class )
            .parameter( 0 )
                .constraint( new MaxDef().value( 75 ) )
        .method( "load", List.class, List.class )
            .crossParameter()
                .constraint( new GenericConstraintDef<>(
                        LuggageCountMatchesPassengerCount.class ).param(
                            "piecesOfLuggagePerPassenger", 2
                        )
                )
        .method( "getDriver" )
            .returnValue()
                .constraint( new NotNullDef() )
                .valid();

然后你ValidatorFactory从这个配置中构建你的。


推荐阅读