2013-07-26 35 views
5

Làm cách nào để nhận được tên trường gây ra org.hibernate.exception.ConstraintViolationException? Cách chắc chắn duy nhất để kiểm tra ràng buộc duy nhất là cam kết giao dịch, vì vậy ngay cả khi tôi kiểm tra nó trước khi ngoại lệ có thể được ném. Vì vậy, tôi cần liên lạc với người dùng phù thủy trường gây ra sự cố lưu.
Thông báo chi tiết ít nhiều về mặt kỹ thuật và không được chấp nhận bởi người dùng. Nó cũng phụ thuộc vào trình điều khiển cơ sở dữ liệu :( IMO tên trường là đủ, giá trị có vấn đề tôi có thể nhận được bản thân mình từ đối tượng. Ngoài ra các thông tin khác tôi có thể chuẩn bị ... nhưng tên lĩnh vực.Tên trường trích xuất gây ra ConstraintViolationException

+0

Bạn đã xem bài đăng này chưa (https://forum.hibernate.org/viewtopic.php?p=2414824)? – Hippoom

+0

Có vẻ như vấn đề của bạn tương tự như http://stackoverflow.com/questions/2995042/how-to-extract-actual-entity-and-property-name-that-is-a-duplicate-from-hibernat?rq = 1. Nếu yo muốn làm điều đó. Nó sẽ được dựa trên trình điều khiển cơ sở dữ liệu. –

+0

Tôi đã nhìn thấy những gì @Hippoom liên kết trước đây, nhưng tôi lấy nó như là trạng thái lỗi thời của kiến ​​thức :) Nó trông giống như 'điêu khắc đá bằng răng'. Ngoài ra tôi đã nhìn thấy những gì Haim chỉ, nhưng nó không có giải pháp ... và cũng đã lỗi thời. Tôi tin rằng nó là có thể, Đó là vấn đề rất phổ biến tôi nghĩ. – Saram

Trả lời

3

không thể bạn sẽ có được ngoại lệ và thông điệp của nguyên nhân của nó như thế này:

try{ 
     t.commit(); 
    }catch (ConstraintViolationException e) { 
     e.getCause().getMessage();// 
    } 

rằng sẽ cho bạn kết quả như [SQL0407] Null values not allowed in column or variable GROUP00002. từ cuối cùng đây là tên cột của bạn, và bạn có thể dịch nó để phù hợp với lĩnh vực của bạn sau đó (sử dụng HashMap tĩnh có thể)

+1

Đó là giải pháp duy nhất tôi đã tìm ra. Nhưng đối với tôi nó không phải là thực hiện độc lập. Thông điệp là khác nhau cho tất cả các cơ sở dữ liệu tôi biết. Tôi cũng không thể tin rằng nhà cung cấp cơ sở dữ liệu sẽ không thay đổi nó trong tương lai: ( – Saram

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