2016-05-22 4 views
0

Я использую thymeleaf + sprinboot для веб-приложения, и мне интересно, как я могу контролировать ошибки проверки при использовании объектов Value (VO).Проверка ошибок Thymeleaf JPA с использованием VO's

Как вы можете видеть, объект имеет ограничение (уникальный) для одного атрибута:

@Entity 
public class Company { 

    @Id 
    @GeneratedValue 
    Integer id = 0; 
    @Column(unique = true) 
    String code; 
    String name; 
    String address; 
... 
} 

Но VO не предназначен, чтобы он:

public class CompanyVO { 

    Integer id = 0; 
    String code; 
    String name; 
    String address; 
... 
} 

, следовательно, контроллер не может подтвердите, если значение повторяется или уникально:

@RequestMapping(method = RequestMethod.POST) 
public String set(@Valid CompanyVO companyVO, BindingResult result, Model model){ 

    Company company = new Company(); 

    if(result.hasErrors()){ 
     return "company"; 
    } 

    if(companyVO.getId() != 0){ 
     company = companyRepository.findOne(companyVO.getId()); 
    } 

    mapper.map(companyVO, company); 
    companyRepository.save(company); 
    return "redirect:/companies"; 
} 

Как я могу показать ошибки проверки в представлении когда я использую VO?

ответ

2

У вас действительно есть только один вариант. Чтобы уловить исключение из Hibernate/DB о повторяющемся значении и заполнить любые дополнительные ошибки в BindingResult.

Выполнение запроса вводит условие гонки. Если 2 пользователя попытаются ввести одно и то же значение примерно в одно и то же время, обе проверки могут пройти (поскольку в базе еще нет значения), и один из них завершится неудачей позже, так как только одна транзакция сможет преуспеть.

Когда вы поймаете исключение, вы можете позвонить BindingResult.addError с помощью FieldError, который содержит имя поля и сообщение об ошибке.