Rumah  >  Soal Jawab  >  teks badan

Mengapakah SequenceGenerator saya melangkau nilai id?

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?

P粉919464207P粉919464207204 hari yang lalu357

membalas semua(2)saya akan balas

  • P粉547420474

    P粉5474204742024-03-29 16:10:10

    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.

    balas
    0
  • P粉898049562

    P粉8980495622024-03-29 13:28:53

    Ini adalah tingkah laku yang hampir normal.

    Satu-satunya tanggungjawab penjana jujukan ialah menjana nilai integer yang berbeza, tidak lebih.

    balas
    0
  • Batalbalas