birincil anahtar

Mevcut

@Id notu

Hibernate'deki her Entity varlığının birincil anahtar olacak bir alanı olmalıdır: bu sınıftaki tüm nesneler için benzersiz bir değer içerir. Tipik olarak, bu alan @Id notuyla açıklanır .

Genel form:

@Id
Class Name;

Örnek:

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

   @Embedded
   public UserAddress address;

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

Ek açıklama yerleşimi

Bu arada, @Column ek açıklamalarını yalnızca alanlar için değil, aynı zamanda yöntemler için de yazabilirsiniz : alıcılar veya ayarlayıcılar için. Örnek:

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

Bu yaklaşım, ek açıklamalar yalnızca sınıflara değil, arayüzlere de eklenmeye başladığında ortaya çıktı. Arayüzde sınıf alanları yoktur, ancak yöntemler vardır: alıcılar ve ayarlayıcılar. Hazırda Beklet, bu standartların her ikisini de destekler.

Önemli! Bir sınıfın @Entity ek açıklaması varsa , tüm alanları Hibernate tarafından kalıcı alanlar olarak ele alınır ( @Transient ek açıklaması belirtilmediği sürece ). Alanlarda hiç ek açıklama olmasa bile: bu durumda sütun adı, sınıf alan adına eşit kabul edilir.

@Id ek açıklamasının önemli bir rol oynadığı yer burasıdır . Ek açıklama bir sınıf alanına yerleştirilirse, Hazırda Beklet, alanların adlarına ve türlerine bakar. @Id ek açıklaması bir yönteme yerleştirilirse , Hibernate yöntemlerin adlarına ve türlerine bakar.

Örnek 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 ")

}

Örnek 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 notu

Yeni nesnelerinize kendiniz bir kimlik atayabilir veya Hibernate'in insafına bırakabilirsiniz. Hibernate'in nesnelerinize kimlikleri nasıl atayacağınızı daha iyi anlaması için özel bir açıklaması vardır:

@GeneratedValue

Bu ek açıklama genellikle @Id ek açıklamasıyla aynı alanı işaretler . 4 olası kimlik atama stratejisi vardır:

  • OTO
  • KİMLİK
  • SEKANS
  • MASA

Belirtilen stratejiye sahip bir açıklama örneği:

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

    public Date createdDate;
}

Politika değeri belirtilmezse, OTOMATİK strateji seçilecektir. OTOMATİK stratejisi, Hibernate'in, öncelikle kimlik alanının veri türüne bağlı olarak kimliği kendisinin atayacağı anlamına gelir.

Neden tipte? Evet, çünkü ID türleri çok farklı olabilir, örneğin String veya GUID. Örnek:

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

    public Date createdDate;
}

Not: Java'da bir GUID, tarihsel olarak UUID olarak adlandırılır. Hazırda Bekletme, isterseniz nesneleriniz için benzersiz UUID'ler oluşturabilir.

Çeşitli @GeneratedValue Stratejileri

GeneratedValue(strategy = GenerationType.IDENTITY) türünü belirtirseniz Hibernate, kimlik ayarını veritabanı katmanına devreder. Tipik olarak bu, PRIMARY KEY, AUTOINCREMENT etiketli bir sütun kullanır.

Ancak kimliklerinizin benzersiz olmasını ve özel olarak belirlenmiş bir algoritmaya göre oluşturulmasını istiyorsanız GeneratedValue(strategy = GenerationType.SEQUENCE) ek açıklamasını kullanabilirsiniz , örneğin:

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

	// ...
}

Kimlik oluşturmanın daha birçok yolu vardır. Örneğin, birkaç sütundan oluşan bileşik benzersiz bir anahtarınız olabilir. Ve veritabanına bir nesne yazarken, tüm bu sütunları doldurmanız gerekir.

Onları ayrıntılı olarak vermeyeceğim. Yine de derslerimizin amacı, resmi belgeleri yeniden anlatmak değil, Hibernate ile tanışmak.

Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok