główny klucz

Dostępny

Adnotacja @Id

Każda jednostka Entity w Hibernate musi mieć pole, które będzie kluczem podstawowym: zawiera unikalną wartość dla wszystkich obiektów tej klasy. Zazwyczaj to pole jest opatrzone adnotacją @Id .

Formularz ogólny:

@Id
Class Name;

Przykład:

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

   @Embedded
   public UserAddress address;

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

Umieszczenie adnotacji

Nawiasem mówiąc, adnotacje @Column można pisać nie tylko dla pól, ale także dla metod: dla pobierających lub ustawiających. Przykład:

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

Takie podejście pojawiło się, gdy zaczęto dodawać adnotacje nie tylko do klas, ale także do interfejsów. Interfejs nie posiada pól klas, ale są metody: pobierające i ustawiające. Hibernate obsługuje oba te standardy.

Ważny! Jeśli klasa ma adnotację @Entity , to wszystkie jej pola są traktowane przez Hibernate jako pola trwałe (chyba że mają określoną adnotację @Transient ). Nawet jeśli pola nie mają żadnych adnotacji: w tym przypadku nazwa kolumny jest traktowana jako równa nazwie pola klasy.

W tym miejscu adnotacja @Id odgrywa ważną rolę. Jeśli adnotacja zostanie umieszczona na polu klasy, Hibernate przyjrzy się nazwom i typom pól. Jeśli adnotacja @Id zostanie umieszczona na metodzie, Hibernate przyjrzy się nazwom i typom metod.

Przykład 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 ")

}

Przykład 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;
   }

}

Adnotacja @GeneratedValue

Możesz samodzielnie przypisać identyfikator do swoich nowych obiektów lub pozostawić go na łasce Hibernate. Aby Hibernate lepiej zrozumiał, jak przypisywać identyfikatory do twoich obiektów, ma specjalną adnotację:

@GeneratedValue

Ta adnotacja zazwyczaj oznacza to samo pole co adnotacja @Id . Ma 4 możliwe strategie przydzielania identyfikatorów:

  • AUTOMATYCZNY
  • TOŻSAMOŚĆ
  • SEKWENCJA
  • TABELA

Przykład adnotacji z określoną strategią:

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

    public Date createdDate;
}

Jeśli nie zostanie określona żadna wartość zasady, zostanie wybrana strategia AUTO. Strategia AUTO oznacza, że ​​Hibernate sam przypisze identyfikator, bazując przede wszystkim na typie danych pola identyfikatora.

Dlaczego w typie? Tak, ponieważ typy identyfikatorów mogą być bardzo różne, na przykład String lub GUID. Przykład:

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

    public Date createdDate;
}

Uwaga: Identyfikator GUID w Javie jest nazywany UUID, historycznie rzecz biorąc. A Hibernate może generować unikalne identyfikatory UUID dla twoich obiektów, jeśli go o to poprosisz.

Różne strategie @GeneratedValue

Jeśli określisz typ GeneratedValue(strategy = GenerationType.IDENTITY) , Hibernate deleguje ustawienie identyfikatora do warstwy bazy danych. Zazwyczaj używa to kolumny oznaczonej KLUCZ PODSTAWOWY, AUTOINCREMENT.

Ale jeśli chcesz, aby Twoje identyfikatory były unikalne i generowane zgodnie ze specjalnie określonym algorytmem, możesz użyć adnotacji GeneratedValue(strategy = GenerationType.SEQUENCE) , na przykład:

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

	// ...
}

Istnieje wiele innych sposobów generowania identyfikatora. Na przykład możesz mieć złożony unikalny klucz składający się z kilku kolumn. A pisząc obiekt do bazy danych, musisz wypełnić wszystkie te kolumny.

Nie podam ich szczegółowo. Mimo to celem naszych wykładów jest zapoznanie się z Hibernate, a nie powtarzanie oficjalnej dokumentacji.

Komentarze
  • Popularne
  • Najnowsze
  • Najstarsze
Musisz się zalogować, aby dodać komentarz
Ta strona nie ma jeszcze żadnych komentarzy