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-класса 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 выполнит проверку, и если какие-то ограничения нарушены, то кинется исключение.
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 и так понимает, что речь идет о колонке таблице.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ