การตรวจสอบข้อผิดพลาดของ Thymeleaf JPA โดยใช้ VO

ฉันใช้ thymeleaf+sprinboot สำหรับเว็บแอปพลิเคชัน และฉันสงสัยว่าฉันจะควบคุมข้อผิดพลาดในการตรวจสอบความถูกต้องได้อย่างไรเมื่อฉันใช้ Value Objects (VO)

อย่างที่คุณเห็น เอนทิตีมีข้อจำกัด (ไม่ซ้ำกัน) สำหรับแอตทริบิวต์หนึ่งรายการ:

@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


person Michael Knight    schedule 22.05.2016    source แหล่งที่มา


คำตอบ (1)


คุณมีทางเลือกเดียวเท่านั้นจริงๆ เพื่อตรวจจับข้อยกเว้นจาก Hibernate/DB เกี่ยวกับค่าที่ซ้ำกันและเติมข้อผิดพลาดเพิ่มเติมใน BindingResult

การสอบถามจะแนะนำสภาวะการแข่งขัน หากผู้ใช้ 2 รายพยายามป้อนค่าเดียวกันในเวลาเดียวกันโดยประมาณ การตรวจสอบความถูกต้องทั้งสองรายการสามารถผ่านได้ (เนื่องจากยังไม่มีค่าในฐานข้อมูล) และหนึ่งในนั้นจะล้มเหลวในภายหลัง เนื่องจากมีธุรกรรมเดียวเท่านั้นที่จะสำเร็จ

เมื่อคุณพบข้อยกเว้น คุณสามารถโทร BindingResult.addError ด้วย FieldError ที่มีชื่อฟิลด์และข้อความแสดงข้อผิดพลาด

person Augusto    schedule 22.05.2016