2010-03-11 21 views
10

Tôi đang sử dụng JDBC và muốn chèn hàng loạt, nhưng tôi cần các khóa được tạo ra cho vòng chèn tiếp theo - là có anyway để thực hiện điều này?Có cách nào để lấy các khóa được tạo khi sử dụng batchUpdate Spring JDBC không?

MapSqlParameterSource[] batchArgs ....

DAL.getNamedParameterTemplate().batchUpdate("INSERT INTO...", batchArgs);

Cảm ơn

+0

Tôi đã tìm thấy câu hỏi của bạn vì tôi đang tìm cách làm điều tương tự, nhưng SpringUpdate Spring lấy BatchPreparedStatementSetter và tôi không thể tìm ra cách để trả về các khóa đã tạo. Tôi tự hỏi nếu bằng cách nào đó bạn phải làm điều này cho mình bằng cách sử dụng jdbc addBatch funtions với các hàm jdbcTemplate của Spring. Bạn có tìm thấy câu trả lời cho câu hỏi của mình không? – titania424

Trả lời

0

Sử dụng db sequences để lấy các giá trị khóa chính tiếp theo và sử dụng nó trong báo cáo chèn.

+1

Tôi có thể sử dụng nó bằng lò xo như thế nào? – MalcomTucker

+0

một cái gì đó dọc theo các dòng này: chọn seq.nextval vào nextPrimaryKeyValue –

+0

Cách tiếp cận này không phải là nguyên tử trừ khi bạn làm toàn bộ điều trong giao dịch (mà sẽ phải khóa toàn bộ bảng, thậm chí không gần một giải pháp lý tưởng). Tôi nghĩ những gì MalcomTucker đang hỏi là liệu bạn có thể thực hiện điều này như truyền KeyHolder đến một trong các API cập nhật mùa xuân() hay không. –

7

folks khung mùa xuân attempted a solution cho sự cố này. Nhưng họ đã từ bỏ nỗ lực khi nó trở nên rõ ràng rằng không có cách nào để đảm bảo rằng giải pháp sẽ làm việc với tất cả các Trình điều khiển JDBC. Điều này là do đặc tả JDBC không đảm bảo rằng các khóa được tạo sẽ được cung cấp sau khi cập nhật hàng loạt. Các trình điều khiển JDBC được tự do triển khai tính năng này khi chúng thấy phù hợp. Trong một số trường hợp, cơ sở dữ liệu bên dưới có thể không trả lại các khóa được tạo ra khiến người lái không thể hỗ trợ tính năng này.

Vì vậy, ngay cả khi bạn đang trực tiếp làm việc với JDBC, bạn sẽ cần phải kiểm tra xem liệu cơ sở dữ liệu và trình điều khiển JDBC của bạn có tạo các khóa được tạo sẵn hay không.

Tôi nhớ tôi đã có thể đạt được điều này với trình điều khiển JDBC MySQL 5.0 với một số nỗ lực nhưng không bao giờ tích hợp giải pháp trong ứng dụng sản xuất của chúng tôi vì chúng tôi cũng phải hỗ trợ các phiên bản cũ hơn của MySQL.

Các vấn đề liên quan