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

Jelaskan perilaku dalam memetakan urutan id komposit yang ditambahkan secara otomatis dengan Hibernate

Sejak id bidang sudah unik dan otomatis bertambah, Anda tidak memerlukan id gabungan dalam hal ini agar entitas Anda dapat terlihat seperti ini:

@Id
@Column(name = "id")
public long getId() {
    return id;
}

@Column(name = "subid")
public int getSubid() {
    return subid;
}

Entitas dapat diambil dengan id menggunakan pengelola entitas:

entityManager.find(MyEntity.class, entityId); 

atau Anda dapat mengambil entitas menggunakan kueri yang menggunakan id dan subid :

MyEntity myEntity = entityManager.createTypeQuery("select me from MyEntity where id = :id and subid = :subid", MyEntity.class)
    .setParameter("id", entityId) 
    .setParameter("subid", entitySubId) 
    .getSingleResult();

Hibernate juga memiliki SelectGenerator yang dapat mengambil id dari kolom database, yang berguna saat database menghasilkan id menggunakan pemicu.

Sayangnya, itu tidak berfungsi dengan id komposit, jadi Anda layu menulis SelectGenerator Anda sendiri yang diperluas atau gunakan string tunggal id_sub_id kolom yang menggabungkan id dan sub-id menjadi satu kolom VARCHAR:

'1-0'
'1-1'
'2-0'
'2-1' 

Anda harus menulis pemicu basis data untuk memperbarui dua kolom menggunakan prosedur tersimpan khusus basis data dan menggabungkan dua kolom ke dalam kolom VARCHAR. Anda kemudian memetakan kolom gabungan menggunakan SelectGenerator standar ke bidang String:

@Id
@Column(name = "id_sub_id")
@GeneratedValue( strategy = "trigger" )
@GenericGenerator( 
    name="trigger", strategy="org.hibernate.id.SelectGenerator",
    parameters = {
        @Parameter( name="keys", value="id_sub_id" )
    }
)
public String getId() {
    return id;
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menghapus Spasi Dari String di MySQL

  2. while($row =mysql_fetch_assoc($result)) - Bagaimana cara melakukan $row?

  3. Cara menghapus kolom dari tabel di MySQL

  4. Jumlah kolom mysql.user salah. Diharapkan 42, ditemukan 44. Tabel mungkin rusak

  5. Kesalahan MySQL 2006 (HY000) pada baris 406:Server MySQL telah hilang