2.1 Adnotacja @Obiekt, @Tabela

Jeśli chcesz zmapować swoją klasę do tabeli w bazie danych, to w tym celu musisz dodać do niej aż 3 adnotacje.

Najpierw musisz dodać adnotację do klasy @Entity. Ta adnotacja przed klasą powie Hibernate, że nie jest to tylko klasa, ale specjalna klasa, której obiekty muszą być przechowywane w bazie danych.

Przykład:

@Entity
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

To wystarczy, aby Hibernate traktował obiekty tej klasy w szczególny sposób.

Druga adnotacja to @Table. Za jego pomocą można ustawić nazwę tabeli w bazie danych, z którą ta klasa będzie powiązana. Przykład:

@Entity
@Table(name="user")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Jeśli nazwa klasy i nazwa tabeli są takie same, adnotację @Tablemożna pominąć.

Ponadto, jeśli Twoja aplikacja działa z tabelami z kilku schematów jednocześnie, musisz określić, w którym konkretnym schemacie znajduje się tabela:

@Entity
@Table(name="user", schema="test")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Tak, wszystko jest tak proste, jak się wydaje.

2.2 Adnotacja @Kolumna

Drugą ważną rzeczą, którą należy wiedzieć, jest mapowanie kolumn tabeli na pola klas. W najprostszej wersji Hibernate po prostu mapuje pola Twojej klasy encji na kolumny żądanej tabeli.

Jeśli chcesz kontrolować wszystkie niuanse mapowania, możesz użyć adnotacji @Column. Przykład:

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

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

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

Adnotacja @Columnma różne parametry, poniżej rozważymy najpopularniejsze z nich:

# Nazwa atrybutu Typ atrybutu Opis
1 nazwa Strunowy Ustawia nazwę kolumny tabeli dla pola klasy
2 unikalny logiczna Wszystkie wartości pól muszą być unikalne
3 zerowalny logiczna Pole może być puste
4 długość int Maksymalna długość (dla stringów)

Dodajmy pewne ograniczenia do pól naszej klasy User Entity:

  • nazwa użytkownika musi być unikalna i nie dłuższa niż 100 znaków
  • poziom może być zerowy
  • utworzona data nie może mieć wartości null

Wtedy nasze adnotacje stają się:

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

   @Column(name="name", unique=true, length=100)
   public String name;

   @Column(name="level", nullable=true)
   public Integer level;

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

Możesz utworzyć obiekt typu User , a nawet przypisać do niego wszystkie pola puste , jednak przy próbie zapisania go do bazy danych Hibernate wykona kontrolę, a jeśli zostaną naruszone jakiekolwiek ograniczenia, zostanie zgłoszony wyjątek.

2.3 Adnotacja @Id

I jeszcze jedna ważna adnotacja @Id. Można go użyć do ustawienia klucza podstawowego dla tabeli.

Wystarczy podać tę adnotację dla żądanego pola - a Hibernate zrobi wszystko sam:

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

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

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

Jeśli chcesz, aby Hibernate niezależnie generował identyfikatory twoich obiektów podczas dodawania ich do bazy danych, musisz dodać jeszcze jedną adnotację - @GeneratedValue. Wtedy nasz przykład wyglądałby tak:

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

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

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

Pominęliśmy tutaj adnotację @Columndla pola id , ponieważ nie zawiera ono wartościowych informacji - nazwa pola i nazwa kolumny w tabeli są takie same, a dzięki pozostałym adnotacjom Hibernate już rozumie, że mówimy o tabeli kolumna.