0

Я хочу использовать Spring Validation с аннотациями для проверки данных моей формы. Так у меня есть следующий объект, например:Проверка формы весны проверяет наличие вставки базы данных?

@Entity 
@ComponentScan 
public class Category { 

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

    @NotEmpty 
    private String type; 

    ... 
} 

Как вы можете видеть здесь, я использовал @NotEmpty на type String. Я хочу использовать это только для проверки моей формы. Он не должен проверяться на вставку базы данных.

Так что, когда я делаю:

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

аннотацию.

+0

BTW, '@ ComponentScan' аннотация на лице выглядит странно. Вы уверены, что вам это нужно? –

+0

Нет, не уверен. совершенно новый к весне. – Mulgard

+0

Скорее всего вы можете удалить его: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-scanning-autodetection –

ответ

2

Да, это возможно.

Первый вариант заключается в использовании разных классов для объекта формы (DTO) и объекта.

Второй вариант - настроить Hibernate и отключить проверку перед сохранением. Потому что этот вопрос уже ответил несколько раз, я буду давать ссылки на них:

+0

Хорошо, но что, если действительно всегда нужно только проверить формы, а не операции с базой данных, но мне нужно всегда использовать один и тот же объект? Проект im, работающий прямо сейчас, действительно огромен, и найти все строки в коде, где я должен отключить проверку, займет очень много времени. Так есть лучший способ только проверять сообщения формы, используя весну? – Mulgard

+0

Вы отключите проверку не для каждого объекта, а только один раз, в конфигурации спящего режима. Или у вас несколько конфигураций спящего режима? –

+0

oh ok. это хороший вариант. Спасибо – Mulgard

Смежные вопросы