当前位置: 首页 > 知识库问答 >
问题:

Hibernate类级验证

何修能
2023-03-14

嗯,我读了几个问题(这里和其他网站)关于类级验证与Hibernate,我创建了注释和验证类,但当验证返回false,我得到一个异常(当验证返回true它的确定)类是无效的(显然是因为验证返回false),我的疑问是:它不是也返回验证消息吗?为什么返回异常代码:

ValidBlock.java

@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ValidBlockValidator.class)
public @interface ValidBlock {
    String message() default "{app.ValidBlock.message}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

ValidBlockValidator。JAVA

public class ValidBlockValidator implements ConstraintValidator<ValidBlock, Block> {

   @Override
   public void initialize(ValidBlock aBlock) {}

   @Override
   public boolean isValid(Block value, ConstraintValidatorContext context) {
      return false;
    }
}

我做了测试,我很确定我收到了Block对象,因为当验证返回true很好时,我只返回false进行测试。

块JAVA

@ValidBlock
public class Block{
   ...
}

错误是:

Grave:javax.validation.约束违反异常:在组[javax.validation.groups.默认持续时间期间,类[com.labsys.model.块]的验证失败,]约束违反列表:[ConstraintViolationImpl{interpolatedMessage='{app。ValidBlock.message},属性路径=,rootBeanClass=类com.labsys.model.块,消息模板='{app。plhd--13/>插入(EntityInsertAction.java:185)在org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:81)在org.hibernate.engine.spi.ActionQueue.execute(ActionQueue. java: 362)在org. hibernate. gine. spi。在org. hibernate. gine. spi上的ActionQueue.执行动作(ActionQueue. java: 354)。在org. hibernate. evental上的ActionQueue. ackteActions(ActionQueue. java: 275)。AbstractFlushingEventListenerer. performExecttions(AbstractFlushingEventListenerer. java: 326)at org. hibernate. evental.DefaultFlushEventLister. onFlush(DefaultFlushEventLister. java: 52)在org. hibernate. interal。在org. hibernate. ejb.同花顺(AbstractEntityManagerImp. java: 981)

Grave:JSF1073:javax。面孔。事件AbortProcessingException obtido durante o processamento de INVOKE_APPLICATION 5:UIComponent ClientId=blockForm:j_idt14,Message=javax。验证。ConstraintViolationException:在组[javax.Validation.groups.Default]的持续时间内,类[com.labsys.model.Block]的验证失败,约束冲突列表:[ConstraintViolationImpl{interpolatedMessage='{app.ValidBlock.message}',propertyPath=,rootBeanClass=class com.labsys.model.Block,messageTemplate='{app.ValidBlock.message}'}]Grave:javax。验证。ConstraintViolationException:在组[javax.Validation.groups.Default]的持续时间内,类[com.labsys.model.Block]的验证失败,约束冲突列表:[ConstraintViolationImpl{interpolatedMessage='{app.ValidBlock.message}',propertyPath=,rootBeanClass=class com.labsys.model.Block,messageTemplate='{app.ValidBlock.message}'}]

共有1个答案

袁波
2023-03-14

您需要创建一个ValidationMessages.properties文件,并使其在类路径的根中可用,以便验证框架推断您的自定义消息。

 类似资料:
  • 问题内容: 让我有实体和实体。实体与有关系。 我想下一步: 如果我删除A,那么也必须删除B。 如果我删除B,那么A也不会删除。 我必须在哪个实体中设置 我必须在哪一边 ? 问题答案: 从A到B的级联应该放在类引用的字段上,从B到A的级联应该放在类引用的字段上。 应该在课堂上,因为您希望每个动作都可以级联。 应该在课堂上,因为您只希望级联某些操作

  • 这个问题已经被问了很多次了,即使是在经历了所有的解决方案之后,我也无法让hibernate validator工作。 控制器类:- servlet-上下文:- 依赖关系:- 验证类:- 我错过了什么?

  • 我使用此实体表示具有自关系的类别系统,以获取子类别: 问题是当我想删除一个有子类别的类别时。我想删除所有子类别,但Java会删除此异常: 无法删除或更新父行:外键约束失败(,约束外键()引用) 我试图改变一些东西,如孤儿移除=真或级联=CascadeType。删除或尝试将级联放在单独的注释中,但不起作用。 我最后的希望是手动递归删除类别child,但这不是正确的方法。 提前感谢:)

  • 我需要应用一个双值验证,这需要与圆周率匹配。我正在考虑使用@pattern(regex=“3.14159265359”)。这是使用Hibernate验证约束应用这样一个约束的最佳方式吗?谢谢

  • 我现在把这两者搞混了。我知道Hibernate Validator6是Bean验证2.0规范的参考实现。它支持分组、错误消息国际化、自定义方法验证等。问题是Spring5支持这些特性还是我只剩下Hibernate Validator6了? 网上所有的参考例子都建议使用Hibernate验证器,没有什么关于Spring验证的发现,请建议或指向其他链接。

  • 使用Spring Boot1.4和Spring Data Rest/MVC,我无法使@valid@requestbody工作。我已经尝试了多个版本的Hibernate验证器,声明验证器bean等。 MyPojo包含各种验证注释,例如@digits、@notnull等。当调用repostiory.save方法但Spring没有尝试对POJO进行任何验证时,我实际上看到了验证器异常。 更新 当试图将实