Saya tetapkan artistId dalam kod berikut:
@Id @SequenceGenerator( name = "artist_sequence", sequenceName = "artist_sequence", allocationSize = 1 ) @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "artist_sequence" ) private Long artistId;
Bolehkah seseorang menjelaskan kepada saya mengapa ArtistId saya kadang-kadang melangkau nilai dan menjadi tidak teratur? Saya perasan bahawa walaupun saya cuba memasukkan data tidak sah ke dalam jadual (apabila pengecualian dibuang), data akan ditolak oleh kemasukan jadual, tetapi artistId saya akan diisi secara halimunan. Ini menjadikan jadual saya dalam keadaan berikut:
id_artis | Nama | Nama belakang |
---|---|---|
1 | Marshall | Mathers |
3 | Tupac | Shakur |
Seperti yang saya katakan, nilai ArtistId saya 2 sedang dilangkau kerana saya cuba memasukkan artis yang sudah sedia ada, tetapi saya tetapkan ia mestilah unik. Jadi, pengecualian dilemparkan, data ditolak, tetapi id saya dengan nilai 2 entah bagaimana diisi (atau dilangkau). Bolehkah anda membantu saya, bagaimana saya boleh menyelesaikan masalah ini untuk mengelakkan situasi ini?
Kedengarannya seperti anda menggunakan pangkalan data Oracle. ID dijana sebelum memasukkan, jadi jika sisipan gagal, ID hilang. Selain itu, apabila menggunakan kluster pelayan, julat ID diperuntukkan kepada setiap pelayan dan boleh berbeza dengan ketara antara sisipan berturut-turut. Jawapan ringkasnya ialah anda tidak boleh bergantung pada ID yang bersebelahan dan tanpa nilai yang hilang. Ini kemungkinan besar akan berfungsi untuk pangkalan data lain.
Ini adalah tingkah laku yang hampir normal.
Satu-satunya tanggungjawab penjana jujukan ialah menjana nilai integer yang berbeza, tidak lebih.