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

Cách bỏ qua các hàng trùng lặp khi chèn

Tùy chọn kiểu cơ sở dữ liệu

Hibernate không đề xuất thêm tùy chọn vào insert into các câu lệnh. Và tôi không biết liệu tùy chọn tương tự có sẵn cho MS SQL hay không.

Nhưng nếu bạn tìm thấy một tùy chọn như vậy, bạn có thể chặn câu lệnh chèn và tự thêm câu lệnh đó:

public class IgnoreRowOnDupInterceptor extends EmptyInterceptor {

  public String onPrepareStatement(String sql) {
    if (sql.startsWith("insert into avaya_cm_cdr") {
      return sql.replace("insert into", 
        "insert /*+ ignore_row_on_dupkey_index(avaya_cm_cdr, i_avaya_cm_cdr_nodub) */ into");
    }
    return sql;
  }

} 

Bạn cần khai báo bộ chặn này trong persistence.xml của mình :

<property name="hibernate.ejb.interceptor" value="...IgnoreRowOnDupInterceptor" />

Tùy chọn kiểu JPA

Bạn có thể nhớ dòng cuối cùng từ lần phân tích cú pháp cuối cùng (hoặc truy xuất nó từ cơ sở dữ liệu) và bỏ qua tệp cho đến dòng đó. Trong trường hợp đó, bạn thậm chí sẽ tiết kiệm thời gian để phân tích lại mọi mục hiện có.

Theo quan điểm của tôi, đây là cách JPA, vì bạn thường chỉ sử dụng cơ sở dữ liệu làm nơi lưu trữ và giữ logic nghiệp vụ trong ứng dụng (Java).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql - bất kỳ cách nào để giúp tìm kiếm toàn văn bản với một chỉ mục khác?

  2. Làm cách nào để thực hiện một truy vấn mysql PDO thứ hai trong một vòng lặp while từ một truy vấn khác?

  3. Cách làm trống cơ sở dữ liệu MySQL

  4. Mã lỗi MySQL 1235

  5. MySQL cho kết quả sai với GROUP BY và ORDER BY