hibernate - Spring表单验证验证数据库插入?

标签 hibernate spring-mvc bean-validation hibernate-validator

我想使用带有注释的 Spring Validation 来验证我的表单数据。 例如,我有以下对象:

@Entity
@ComponentScan
public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private long id;

    @NotEmpty
    private String type;

    ...
}

正如您在这里所看到的,我在 type 字符串上使用了@NotEmpty。我只想用它来验证我的表单。它不应该验证数据库插入。

所以当我这样做时:

@RequestMapping(value = "/myForm", method = RequestMethod.POST)
public String categoryPOST(HttpServletRequest request, Model model, @Valid Category category, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return "form";
    }

    return "redirect:/results";
}

它正在按照我想要的方式工作。但是当我必须创建一个虚拟对象时:

Category category = new Category();

我对那个空对象执行保存:

this.category_repository.save(category);

我收到错误(仅重要部分):

Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [my.project.jpa.entity.Category] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='darf nicht leer sein', propertyPath=type, rootBeanClass=class my.project.jpa.entity.Category, messageTemplate='{org.hibernate.validator.constraints.NotEmpty.message}'}
]

这不是我想要的。我想使用注释进行表单验证,但我不希望在数据库操作上执行验证。

这有可能吗?

其他信息

我使用以下方法得到了相同的结果:

javax.validation.constraints.NotNull;

注释。

最佳答案

是的,这是可能的。

第一个选项是对表单对象 (DTO) 和实体使用不同的类。

第二个选项是配置 Hibernate 并在保存之前禁用验证。因为这个问题已经回答过几次了,我将提供它们的链接:

关于hibernate - Spring表单验证验证数据库插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38530409/

相关文章:

java - JSR-303 Bean 验证 - 将多个注释自定义约束到一个 validator

java - 使用@RequestParam时不支持请求方法 'POST'

javascript - Spring MVC @ResponseBody、JSON、JSP。尝试将 List<Objects> 从 Controller 返回到 JSP

java - 为什么 ExceptionHandlerExceptionResolver 会进行重定向而不是简单的响应?

java - 如果我在 jsr 303 中使用两个自定义注释,如果第一个验证失败,如何停止对第二个注释的验证?

spring-boot - 在weblogic服务器中部署spring boot应用程序时如何解决javax.validation的NoSuchMethodError?

Hibernate 类型和 JBoss 兼容性问题

hibernate - 在 postgres db 中使用 hibernate-spring 插入记录。序列生成器问题

java - Mysql,使用逗号向列添加值

hibernate - 提取导致 ConstraintViolationException 的字段名称