2.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.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-класу
- ім'я користувача має бути унікальним і не довшим за 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 виконає перевірку, і якщо якісь обмеження порушені, то буде виняток.
2.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 і так розуміє, що йдеться про колонку таблиці.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ