kunci utama

Tersedia

@anotasi id

Setiap entiti Entiti dalam Hibernate mesti mempunyai medan yang akan menjadi kunci utama: ia mengandungi nilai unik untuk semua objek kelas ini. Biasanya, medan ini diberi anotasi dengan anotasi @Id .

Borang am:

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

Peletakan anotasi

By the way, anda boleh menulis @Column anotasi bukan sahaja untuk medan, tetapi juga untuk kaedah: 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 apabila anotasi mula ditambah bukan sahaja pada kelas, tetapi juga pada antara muka. Antara muka tidak mempunyai medan kelas, tetapi terdapat kaedah: getter dan setter. Hibernate menyokong kedua-dua piawaian ini.

Penting! Jika kelas mempunyai anotasi @Entity , maka semua medannya dianggap oleh Hibernate sebagai medan berterusan (melainkan jika mereka mempunyai anotasi @Transient ditentukan ). Walaupun medan tidak mempunyai sebarang anotasi sama sekali: dalam kes ini, nama lajur dianggap sama dengan nama medan kelas.

Di sinilah anotasi @Id memainkan peranan penting. Jika anotasi diletakkan pada medan kelas, maka Hibernate akan melihat nama dan jenis medan. Jika anotasi @Id diletakkan pada kaedah, maka Hibernate akan melihat nama dan jenis kaedah.

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

}

@GeneratedValue anotasi

Anda boleh memberikan id kepada objek baharu anda sendiri, atau biarkan ia di bawah kuasa Hibernate. Agar Hibernate lebih memahami cara menetapkan ID pada objek anda, ia mempunyai anotasi khas:

@GeneratedValue

Anotasi ini biasanya menandakan medan yang sama dengan anotasi @Id . Dia mempunyai 4 kemungkinan strategi penugasan ID:

  • AUTO
  • IDENTITI
  • URUTAN
  • JADUAL

Contoh anotasi dengan strategi yang ditentukan:

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

    public Date createdDate;
}

Jika tiada nilai dasar dinyatakan, strategi AUTO akan dipilih. Strategi AUTO bermakna Hibernate akan menetapkan ID itu sendiri, berdasarkan terutamanya pada jenis data medan ID.

Mengapa pada jenis? Ya, kerana jenis ID boleh sangat berbeza, contohnya, String atau GUID. Contoh:

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

    public Date createdDate;
}

Nota: GUID dalam Java dipanggil UUID, mengikut sejarah. Dan Hibernate boleh menjana UUID unik untuk objek anda jika anda memintanya.

Pelbagai Strategi @GeneratedValue

Jika anda menentukan jenis GeneratedValue(strategy = GenerationType.IDENTITY) , kemudian Hibernate mewakilkan tetapan ID ke lapisan pangkalan data. Lazimnya, ini menggunakan lajur berlabel PRIMARY KEY, AUTOINCREMENT.

Tetapi jika anda mahu ID anda unik dan dijana mengikut algoritma yang ditentukan khas, maka anda boleh menggunakan anotasi GeneratedValue(strategy = GenerationType.SEQUENCE) , sebagai contoh:

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

	// ...
}

Terdapat banyak lagi cara untuk menjana ID. Sebagai contoh, anda mungkin mempunyai kunci unik komposit yang terdiri daripada beberapa lajur. Dan apabila menulis objek ke pangkalan data, anda perlu mengisi semua lajur ini.

Saya tidak akan memberi mereka secara terperinci. Namun, tujuan kuliah kami adalah untuk berkenalan dengan Hibernate, dan bukan untuk menceritakan semula dokumentasi rasmi.

Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi