Làm cách nào để tìm ra ràng buộc duy nhất đã bị vi phạm?
ngoại lệ đang bị xiềng xích, bạn phải gọi getCause()
đệ quy để có được ngoại lệ cụ thể nhà cung cấp (và có thể đi xuống SQLException
) để chuyển nó thành một cái gì đó ứng dụng của bạn có thể xử lý độc đáo cho người dùng của bạn. Sau đây sẽ in ra chuỗi các ngoại lệ:
for (t = e.getCause(); t != null; t = t.getCause()) {
logger.debug("Exception:" + t);
}
Đối với việc xử lý ngoại lệ và "dịch", bạn có thể làm một cái gì đó giống như những gì mùa xuân không (xem JpaDialect
lớp khác nhau, ví dụ HibernateJpaDialect
để có được một ý tưởng).
Tất cả điều này là không tốt đẹp, mã này sẽ không thể di chuyển và tìm kiếm những gì thuộc tính (s) gây ra vi phạm sẽ không hề dễ dàng. Điều này bằng cách nào đó xác nhận rằng không có elegant and portable way to handle constraint violations in JPA.
Nguồn
2010-08-18 04:29:02
... và sau đó phân tích cú pháp 'getCause(). GetMessag()'? – deamon
Điều đó tùy thuộc vào ngoại lệ bạn sẽ nhận được. Nếu đó là một 'SQLException,' kiểm tra lỗi và SQLStatus. Tuy nhiên, một số khung công tác như Spring chuyển những thứ này thành một cái gì đó có ý nghĩa hơn ('DataIntegrityViolationException'). –