Spring Form Validation验证数据库插入?

时间:2016-07-22 15:36:10

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

我想使用Spring Validation with Annotations来验证我的表单数据。 所以我有以下对象例如:

@Entity
@ComponentScan
public class Category {

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

    @NotEmpty
    private String type;

    ...
}

正如您在此处所见,我在@NotEmpty字符串上使用了type。我只想用它来验证我的表格。它不应该验证数据库插入。

所以当我这样做时:

@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;

诠释。

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。

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

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