2013-06-12 23 views
23

Tôi phải cập nhật thông tin trong cơ sở dữ liệu của mình.javax.servlet.ServletException: HV000030: Không thể tìm thấy trình duyệt tính hợp lệ cho loại: java.lang.Integer

FacadePatient.java mã lớp:

public Patient update(Patient p) { 

    Patient pat = em.find(Patient.class, p.getPatientId()); 
    p.setPatientPhone(pat.getPatientPhone()); 
    p.setPatientDateNaiss(pat.getPatientDateNaiss()); 
    p.setPatientEmail(pat.getPatientEmail()); 
    p.setPatientJob(pat.getPatientJob()); 
    p.setPatientSmoking(pat.getPatientSmoking()); 
    p.setPatientSize(pat.getPatientSize()); 
    em.merge(pat); 
    return p; 
} 
+0

OK, vậy vấn đề là gì, bạn sẽ nhận được ngoại lệ của trình xác thực hoặc bạn không biết bắt đầu từ đâu? – JoshDM

+0

nó cho lỗi này: javax.validation.UnexpectedTypeException: HV000030: Không có trình duyệt tính hợp lệ nào có thể được tìm thấy cho kiểu: java.lang.Integer, –

+0

Tôi cũng đã thay đổi thuộc tính Kiểu từ số nguyên thành chuỗi nhưng cùng lỗi –

Trả lời

97

HV000030: Không validator có thể được tìm thấy cho loại: java.lang.Integer

Điều đó sẽ xảy ra khi bạn sử dụng JSR303 xác nhận đậu trong hương vị của Hibernate Validator và bạn có trong thực thể JPA của bạn Hibernate cụ thể @NotEmpty trên một tài sản Integer như thế này:

@NotEmpty 
private Integer some; 

Điều này hoàn toàn sai. Số nguyên không thể được coi là string, collection, map or array. Sử dụng tiêu chuẩn @NotNull thay thế.

@NotNull 
private Integer some; 

Xin lưu ý rằng vấn đề cụ thể hoàn toàn không liên quan đến JSF. Trong tương lai, vui lòng tìm hiểu cách loại trừ càng nhiều tiếng ồn càng tốt và giải quyết vấn đề cụ thể bằng ví dụ: thực thi mã JPA riêng lẻ. JSF chỉ đơn thuần là HTTP/MVC messenger ở đây và PrimeFaces chỉ đơn thuần là trình tạo mã HTML/CSS/jQuery/UI.

+1

Tôi cũng chạy trên cùng một lỗi trong một kịch bản khác (nhưng rất ngu ngốc): '@Pattern (regexp =" [1-9] [0-9] {9} ", \t \t \t message =" Phone số là 10 chữ số ") \t riêng int điện thoạiNumber;' -> sửa chữa bởi chỉ đơn thuần: 'riêng String phoneNumber;' –

+0

Lỗi tương tự xảy ra với @Size (max = 2). Vì một số lý do, Apache MyFaces 2.2 cho thấy lỗi trong một hộp cảnh báo trong ứng dụng JSF của tôi, trong khi Mojarra của Oracle thì không. –

+0

@Stephan: Điều đó sẽ xảy ra khi ngoại lệ được ném trong yêu cầu ** ajax ** (kiểm tra nhật ký máy chủ!). Mojarra chỉ cho thấy cảnh báo đó trong giai đoạn phát triển. Vấn đề này không liên quan đến câu hỏi hiện đang được hỏi. Xem thêm a.o. http://stackoverflow.com/questions/27526753/exception-stack-trace-in-jsf-ajax-requests/ – BalusC

9

Tôi muốn thêm vào câu trả lời ở trên. ngoại lệ này cũng sẽ được ném ra khi bạn có một số điều ví dụ như thế này:

@Size(min = 1, max = 20) 
@Column(name = "ID") 
private int id; 
+0

Tôi nhận được lỗi này trong cùng một tình huống. Nhưng tại sao chúng ta lại gặp lỗi này. Bởi vì trước đây nó đã làm việc trong dự án của tôi. Sau đó tôi nhận được lỗi này do @Size. – Hema

0

Bạn có thể nhận vấn đề này cũng trong những trường hợp như dưới đây;

@Size(max = 45, message = "Field 'SomeEntityClass.yourEnumType' cannot exceed 45 characters") @Column(length=45) 
@Enumerated(EnumType.STRING) 
private SomeEnumType yourEnumType; 

Điều này là do vào thời điểm xác nhận giá trị thứ tự của 'yourEnumType' (đó là kiểu integer) được xử lý trước khi lập bản đồ String mà Hibernate giải quyết trước khi lưu trữ các giá trị cơ sở dữ liệu.

Các vấn đề liên quan