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ę @Table
moż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 @Column
ma 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ę @Column
dla 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.
GO TO FULL VERSION