kunci utama

Tersedia

@Id anotasi

Setiap entitas Entitas di Hibernasi harus memiliki bidang yang akan menjadi kunci utama: berisi nilai unik untuk semua objek kelas ini. Biasanya, kolom ini dianotasi dengan anotasi @Id .

Bentuk umum:

@Id
Class Name;

Contoh:

@Entity
@Table(name="user")
class User
{
   @Id
   @Column(name="id")
   public Integer id;

   @Embedded
   public UserAddress address;

   @Column(name="created_date")
   public Date createdDate;
}

penempatan anotasi

Omong-omong, Anda dapat menulis anotasi @Column tidak hanya untuk bidang, tetapi juga untuk metode: untuk getter atau setter. Contoh:

@Entity
@Table(name="user")
class User
{
    public Integer id;
    public Date createdDate;

   @Id
   @Column(name="id")
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   @Column(name="created_date")
   public Date getDate() {
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
      this. createdDate = date;
   }
}

Pendekatan ini muncul ketika anotasi mulai ditambahkan tidak hanya ke kelas, tetapi juga ke antarmuka. Antarmuka tidak memiliki bidang kelas, tetapi ada metode: getter dan setter. Hibernasi mendukung kedua standar ini.

Penting! Jika suatu kelas memiliki anotasi @Entity , maka semua bidangnya diperlakukan oleh Hibernate sebagai bidang persisten (kecuali jika kelas tersebut memiliki anotasi @Transient yang ditentukan ). Sekalipun bidang tidak memiliki anotasi sama sekali: dalam hal ini, nama kolom dianggap sama dengan nama bidang kelas.

Di sinilah anotasi @Id memainkan peran penting. Jika anotasi ditempatkan pada bidang kelas, maka Hibernasi akan melihat nama dan jenis bidang. Jika anotasi @Id ditempatkan pada suatu metode, maka Hibernasi akan melihat nama dan jenis metode tersebut.

Contoh 1:

@Entity
@Table(name="user")
class User
{
   @Id
    public Integer id;
    public Date createdDate;  //this field will be treated as if it had @Column(name=" createdDate ")

}

Contoh 2:

@Entity
@Table(name="user")
class User
{
    public Integer id;
    public Date createdDate;

   @Id
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   public Date getDate() { //this field will be treated as if it had @Column(name=”date ”)
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
  	this. createdDate = date;
   }

}

anotasi @GeneratedValue

Anda dapat menetapkan sendiri id ke objek baru Anda, atau menyerahkannya pada belas kasihan Hibernate. Agar Hibernate lebih memahami cara menetapkan ID ke objek Anda, ia memiliki anotasi khusus:

@GeneratedValue

Anotasi ini biasanya menandai bidang yang sama dengan anotasi @Id . Dia memiliki 4 kemungkinan strategi penugasan ID:

  • MOBIL
  • IDENTITAS
  • URUTAN
  • MEJA

Contoh anotasi dengan strategi yang ditentukan:

@Entity
@Table(name="user")
class User
{
    @Id
	@GeneratedValue(strategy = GenerationType.AUTO)
    public Integer id;

    public Date createdDate;
}

Jika tidak ada nilai kebijakan yang ditentukan, strategi AUTO akan dipilih. Strategi AUTO berarti bahwa Hibernate akan menetapkan ID itu sendiri, terutama berdasarkan tipe data bidang ID.

Mengapa pada tipe? Ya, karena tipe ID bisa sangat berbeda, misalnya String atau GUID. Contoh:

@Entity
@Table(name="user")
class User
{
    @Id
	@GeneratedValue
    public UUID id;

    public Date createdDate;
}

Catatan: GUID di Java disebut UUID, secara historis. Dan Hibernate dapat menghasilkan UUID unik untuk objek Anda jika Anda memintanya.

Berbagai Strategi @GeneratedValue

Jika Anda menentukan tipe GeneratedValue(strategy = GenerationType.IDENTITY) , maka Hibernate mendelegasikan pengaturan ID ke lapisan database. Biasanya, ini menggunakan kolom berlabel PRIMARY KEY, AUTOINCREMENT.

Tetapi jika Anda ingin ID Anda unik dan dibuat sesuai dengan algoritme yang ditentukan secara khusus, Anda dapat menggunakan anotasi GeneratedValue(strategy = GenerationType.SEQUENCE) , misalnya:

@Entity
@Table(name="user")
public class User {
	@Id
	@GeneratedValue(generator = "sequence-generator")
	@GenericGenerator(
  	name = "sequence-generator",
  	strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
  	parameters = {
    	@Parameter(name = "sequence_name", value = "user_sequence"),
    	@Parameter(name = "initial_value", value = "4"),
    	@Parameter(name = "increment_size", value = "1")
    	}
	)
	private long userId;

	// ...
}

Ada banyak lagi cara untuk menghasilkan ID. Misalnya, Anda mungkin memiliki kunci unik gabungan yang terdiri dari beberapa kolom. Dan saat menulis objek ke database, Anda harus mengisi semua kolom ini.

Saya tidak akan memberikannya secara detail. Tetap saja, tujuan kuliah kami adalah untuk mengenal Hibernate, dan bukan untuk menceritakan kembali dokumentasi resmi.

Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar