Đây là phiên bản cụ thể của this question.
Tôi muốn kiểm tra xem tôi có đang chèn hàng trùng lặp hay không. Tôi có nên kiểm tra nó theo chương trình trong lớp ứng dụng của mình không:Logic: Cơ sở dữ liệu hoặc Ứng dụng/2 (kiểm tra ràng buộc)
if (exists(obj))
{
throw new DuplicateObjectException();
}
HibernateSessionFactory.getSession().save(obj);
hoặc tôi nên bắt ngoại lệ được ném bởi lớp cơ sở dữ liệu và được kích hoạt khi tôi vi phạm các giới hạn?
try
{
HibernateSessionFactory.getSession().save(obj);
}
catch(ConstraintViolationException e)
{
throw new DuplicateObjectException();
}
EDIT: Nói cách khác: dù khó khăn là có để duy trì (đó là thiết kế cơ sở dữ liệu tốt dù sao, và tôi không thể chắc chắn ứng dụng của tôi sẽ là người duy nhất truy cập vào bảng) tôi sẽ dựa về ràng buộc và xử lý ngoại lệ, vi phạm của nó sẽ tăng lên, hoặc tôi sẽ kiểm tra tốt hơn?
EDIT2: Dĩ nhiên tôi kiểm tra + chèn trong một giao dịch, khóa bảng để đảm bảo không có quá trình khác đang viết kỷ lục khác trong khi chờ đợi