Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hibernate @SQLInsert dan Pada Kunci Duplikat

Jawaban yang benar adalah dengan menggunakan pernyataan berikut:

INSERT INTO table (colA, colB) VALUES (?,?) ON DUPLICATE KEY 
UPDATE colB = VALUES(colB);

Namun kemudian muncul masalah bahwa hibernasi tidak menerima nilai kenaikan otomatis kembali, setelah pernyataan pembaruan dilakukan.

Saya menemukan posting blog berikut (http://www.jroller.com/mmatthews/entry/ mendapatkan_hibernate_and_mysql_s ) dan memodifikasi kueri menjadi berikut:

INSERT INTO table (colA, colB) VALUES (?,?) ON DUPLICATE KEY 
UPDATE colB = VALUES(colB), id = LAST_INSERT_ID(id);

yang akhirnya berhasil.

Masalah yang tak terpecahkan dengan pendekatan ini adalah, bahwa penyisipan dua entitas yang sama dalam transaksi yang sama tidak bekerja. Bahkan jika penyisipan kedua akan menyebabkan pembaruan yang benar, mereka akan berakhir dengan 2 entitas-instance yang mewakili baris database yang sama - yang tidak diperbolehkan.

Untuk mengatasi ini, Anda hanya perlu memastikan bahwa Anda tidak memasukkan 2 entitas yang dirender sama karena batasannya. (Saya menggunakan logika yang sama untuk equals/hashcode sebagai batasan composite-unique-key, jadi saya dapat menghilangkan duplikat seperti itu saat melakukan penyisipan batch)




  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 - alternatif untuk subquery bersarang saat membatasi data agregat dalam subquery yang berkorelasi

  2. Tidak dapat menyimpan emoji di database

  3. Permintaan Pembaruan MySQL dengan gabungan kiri dan grup oleh

  4. java.sql.SQLException:Sebelum memulai rangkaian hasil

  5. Kesalahan saat mencoba memperbarui tabel waktu di boot musim semi