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;
}