Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hibernate + ON logic KEY DUPLICATE

Hibernate có thể ném ra một ConstraintViolationException khi bạn cố gắng chèn một hàng phá vỡ một ràng buộc (bao gồm một ràng buộc duy nhất). Nếu bạn không nhận được ngoại lệ đó, bạn có thể nhận được một số ngoại lệ Hibernate chung khác - nó phụ thuộc vào phiên bản Hibernate và khả năng của Hibernate ánh xạ ngoại lệ MySQL thành ngoại lệ Hibernate trong phiên bản và loại cơ sở dữ liệu bạn đang sử dụng ( Tôi chưa thử nghiệm nó trên mọi thứ).

Bạn sẽ chỉ nhận được ngoại lệ sau khi gọi flush() , vì vậy bạn nên đảm bảo rằng điều này cũng nằm trong khối try-catch của bạn.

Tôi sẽ cẩn thận khi triển khai các giải pháp trong đó bạn kiểm tra xem hàng có tồn tại trước không. Nếu nhiều phiên cập nhật bảng đồng thời, bạn có thể nhận được điều kiện cuộc đua. Hai tiến trình đọc hàng gần như cùng một lúc để xem nó có tồn tại hay không; cả hai đều phát hiện ra rằng nó không có ở đó, và sau đó cả hai đều cố gắng tạo một hàng mới. Một người sẽ thất bại tùy thuộc vào người thắng cuộc đua.

Một giải pháp tốt hơn là thử chèn trước và nếu nó không thành công, hãy giả sử rằng nó đã ở đó rồi. Tuy nhiên, một khi bạn có một ngoại lệ, bạn sẽ phải quay lại, vì vậy điều đó sẽ hạn chế cách bạn có thể sử dụng phương pháp này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python:ưu điểm và nhược điểm của _mysql so với MySQLdb?

  2. Cách chạy máy chủ lưu trữ mysqladmin trên Amazon RDS

  3. Các bản ghi mới kể từ truy vấn cuối cùng trong MySQL View

  4. Sao lưu và khôi phục đơn giản cho Cơ sở dữ liệu mysql từ Java

  5. MySql Chọn Vị trí và C #