2012-11-07 1 views
0

내 DAO 및 엔티티는 다음과 같습니다. 감사.난 콩 검증을 사용하고 있습니다. 내 엔터티의 PerPersist 메서드에서 유효성 검사가 실패 할 경우 지속을 중지하려면 어떻게해야합니까?

엔티티 :

import java.io.Serializable; 
import java.util.Set; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.PrePersist; 
import javax.persistence.Table; 
import javax.validation.ConstraintViolation; 
import javax.validation.Validation; 
import javax.validation.Validator; 
import javax.validation.ValidatorFactory; 
import javax.validation.constraints.AssertTrue; 
import javax.validation.constraints.Min; 
import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 


/** 
* The persistent class for the CAR database table. 
* 
*/ 
@Entity 
@Table(name="CAR") 
public class Car implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="CAR_ID") 
    private int carId; 

    @Column(name="INSPECTION_PASSED") 
    @AssertTrue(message = "The car has to pass the vehicle inspection first")//, groups = CarChecks.class) 
    private boolean inspectionPassed; 

    @Column(name="LICENSE_PLATE_NUMBER") 
    @NotNull(message = "A license plate is required.") 
    @Size(min = 2, max = 14, message="The license plate field must be 2-14 characters.") 
    private String licensePlateNumber; 

    @Column(name="MANUFACTURER") 
    @NotNull(message = "A manufacturer is required.") 
    private String manufacturer; 

    @Column(name="REGISTERED") 
    private boolean registered; 

    @Column(name="SEAT_COUNT") 
    @Min(value =2, message="The car must contain more than 1 seat.") 
    private int seatCount; 

    @Column(name="DRIVER_ID") 
    private int driverId; 

    @PrePersist 
    public void testPrePersist(){ 
     System.out.println("@@@@PrePersist was called. " + manufacturer); 
     ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
     Validator validator = factory.getValidator(); 
     Set<ConstraintViolation<Car>> violations = validator.validate(this); 
     for (ConstraintViolation<Car> violation : violations) { 
       System.out.format("%s: %s%n",violation.getPropertyPath(), violation.getMessage()); 
     } 
    } 

    public Car() { 
    } 

    public int getCarId() { 
     return this.carId; 
    } 

    public void setCarId(int carId) { 
     this.carId = carId; 
    } 

    public boolean getInspectionPassed() { 
     return this.inspectionPassed; 
    } 

    public void setInspectionPassed(boolean inspectionPassed) { 
     this.inspectionPassed = inspectionPassed; 
    } 

    public String getLicensePlateNumber() { 
     return this.licensePlateNumber; 
    } 

    public void setLicensePlateNumber(String licensePlateNumber) { 
     this.licensePlateNumber = licensePlateNumber; 
    } 

    public String getManufacturer() { 
     return this.manufacturer; 
    } 

    public void setManufacturer(String manufacturer) { 
     this.manufacturer = manufacturer; 
    } 

    public boolean getRegistered() { 
     return this.registered; 
    } 

    public void setRegistered(boolean registered) { 
     this.registered = registered; 
    } 

    public int getSeatCount() { 
     return this.seatCount; 
    } 

    public void setSeatCount(int seatCount) { 
     this.seatCount = seatCount; 
    } 

    public void setDriverId(int diverId) { 
     this.driverId = diverId; 
    } 

    public int getDriverId() { 
     return driverId; 
    } 
} 

답변

1

당신은 모든 오류 또는 다른 런타임 예외를 포함하는 javax.validation.ConstraintViolationException을 던질 수 있습니다.

ConstraintViolationException(String message,<ConstraintViolation<?>> constraintViolations) 

최대 절전 모드에서 BeanValidationEventListener를 살펴 봅니다. 당신이 지속 사전에 수명주기 기반의 유효성 검사를 사용하는 경우 https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/cfg/beanvalidation/BeanValidationEventListener.java

1

후 자동으로 실패하고 ConstraintViolationException가 발생합니다 유지됩니다. 유효성 검사가 실패 할 경우 지속을 취소 할 추가 작업이 필요 없습니다. 예외를 적절한 방식으로 처리하기 만하면됩니다.