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).