1. Анотація @Entity, @Table
Якщо ти хочеш замапити свій клас на таблицю в базі даних, для цього потрібно додати до нього цілих 3 анотації.
По-перше, потрібно додати до класу @Entity
. Ця анотація перед класом вкаже Hibernate, що це не просто клас, а спеціальний клас, об'єкти якого потрібно зберігати у базі даних.
Приклад:
@Entity
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Цього достатньо, щоб Hibernate по-особливому ставився до об'єктів цього класу.
Друга анотація — @Table
. З її допомогою можна вказати ім'я таблиці в базі, з якою буде пов'язаний цей клас. Приклад:
@Entity
@Table(name="user")
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Якщо ім'я класу та ім'я таблиці збігаються, то анотацію @Table
можна не вказувати.
Також якщо твоя програма працює з таблицями з кількох схем одночасно, потрібно вказати, в якій конкретно схемі знаходиться таблиця:
@Entity
@Table(name="user", schema="test")
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Так, все саме просто, як здається на перший погляд.
2. Анотація @Column
Другий важливий момент, який потрібно знати, — це мапінг колонок таблиці на поля класу. У найпростішому варіанті Hibernate просто сам замапить поля твого entity-класу на колонки потрібної таблиці.
Якщо ж ти хочеш контролювати всі нюанси мапінгу, то можеш скористатися анотацією @Column
. Приклад:
@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;
}
Анотація @Column
має різні параметри. Нижче ми розглянемо найпопулярніші з них:
# | Ім'я атрибута | Тип атрибуту | Опис |
---|---|---|---|
1 | name | String | Вказує ім'я колонки таблиці для поля класу |
2 | unique | boolean | Всі значення поля мають бути унікальними |
3 | nullable | boolean | Поле може набувати значення null |
4 | length | int | Максимальна довжина (для рядків) |
Давай додамо кілька обмежень на поля нашого Entity-класу User:
- ім'я користувача має бути унікальним і не довшим за 100 символів
- level може бути null
- createdDate не може бути null
Тоді наші анотації стануть такими:
@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;
}
Ти можеш створити об'єкт типу User і навіть привласнити йому всі поля null, однак в разі спробі зберегти його до бази даних Hibernate виконає перевірку, і якщо якісь обмеження порушені, кинеться виняток.
3. Анотація @Id
І ще одна важлива анотація — це @Id
. З її допомогою можна вказати первинний ключ для таблиці.
Потрібно просто поставити цю анотацію біля потрібного поля — і Hibernate сам усе зробить:
@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;
}
Якщо ти хочеш, щоб Hibernate самостійно генерував ID твоїх об'єктів під час їх додавання до бази, потрібно додати ще одну анотацію — @GeneratedValue
. Тоді наш приклад виглядатиме так:
@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;
}
Ми тут опустили анотацію @Column
для поля id, оскільки вона не несе цінної інформації — ім'я поля та ім'я колонки в таблиці збігаються, а завдяки решті анотацій Hibernate і так розуміє, що йдеться про колонку таблиці.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ