Validasi kesalahan Thymeleaf JPA menggunakan VO

Saya menggunakan thymeleaf+sprinboot untuk aplikasi web dan saya bertanya-tanya bagaimana saya dapat mengontrol kesalahan validasi ketika saya menggunakan Value Objects (VO's).

Seperti yang Anda lihat, entitas memiliki batasan (unik) untuk satu atribut:

@Entity
public class Company {

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

Namun VO tidak dimaksudkan untuk memilikinya:

public class CompanyVO {

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

karenanya, pengontrol tidak dapat memvalidasi jika nilainya berulang atau unik:

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

Bagaimana cara menampilkan kesalahan validasi pada tampilan saat saya menggunakan VO?


person Michael Knight    schedule 22.05.2016    source sumber


Jawaban (1)


Anda hanya punya satu pilihan. Untuk menangkap pengecualian dari Hibernate/DB tentang nilai duplikat dan mengisi kesalahan tambahan di BindingResult.

Melakukan kueri akan memperkenalkan kondisi balapan. Jika 2 pengguna mencoba memasukkan nilai yang sama pada waktu yang hampir bersamaan, kedua validasi dapat lolos (karena belum ada nilai dalam DB) dan salah satunya akan gagal nanti karena hanya satu transaksi yang berhasil.

Saat Anda menangkap pengecualian, Anda dapat memanggil BindingResult.addError dengan FieldError yang berisi nama bidang dan pesan kesalahan.

person Augusto    schedule 22.05.2016