2.1 Анотация @Entity, @Table
Ако искате да картографирате вашия клас към table в базата данни, тогава за това трябва да добавите най-много 3 анотации към него.
Първо, трябва да добавите анотация към класа @Entity
. Тази анотация пред класа ще каже на Hibernate, че това не е просто клас, а специален клас, чиито обекти трябва да се съхраняват в базата данни.
Пример:
@Entity
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Това е достатъчно, за да може Hibernate да третира обектите от този клас по специален начин.
Втората анотация е @Table
. С негова помощ можете да зададете името на tableта в базата данни, с която този клас ще бъде свързан. Пример:
@Entity
@Table(name="user")
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Ако името на класа и името на tableта са еднакви, тогава анотацията @Table
може да бъде пропусната.
Освен това, ако вашето приложение работи с таблици от няколко схеми едновременно, тогава трябва да посочите в коя конкретна схема се намира tableта:
@Entity
@Table(name="user", schema="test")
class User {
public int id;
public String name;
public int level;
public Date createdDate;
}
Да, всичко е толкова просто, колкото изглежда.
2.2 @Колонна анотация
Второто важно нещо, което трябва да знаете, е картографирането на колоните на tableта към полетата на класа. В най-простата version Hibernate просто ще картографира полетата на вашия клас обект към колоните на желаната table.
Ако искате да контролирате всички нюанси на картографирането, можете да използвате анотацията @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 | име | низ | Задава името на колоната на tableта за полето клас |
2 | единствен по рода си | булево | Всички стойности на полето трябва да са уникални |
3 | nullable | булево | Полето може да бъде нула |
4 | дължина | вътр | Максимална дължина (за низове) |
Нека добавим някои ограничения към полетата на нашия клас User Entity:
- потребителското име трябва да е уникално и не по-дълго от 100 знака
- ниво може да бъде нула
- createdDate не може да бъде нула
Тогава нашите анотации стават:
@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;
}
Можете да създадете обект от тип Потребител и дори да му присвоите всички нулеви полета , но когато се опитате да го запазите в базата данни, Hibernate ще извърши проверка и ако няHowви ограничения са нарушени, ще бъде хвърлено изключение.
2.3 Анотация @Id
И още една важна анотация е @Id
. Може да се използва за задаване на първичен ключ за table.
Просто трябва да посочите тази анотация за желаното поле - и 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 да генерира независимо идентификаторите на вашите обекти, когато ги добавяте към базата данни, тогава трябва да добавите още една анотация - @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 тук, тъй като тя не носи ценна информация - името на полето и името на колоната в tableта са еднакви и благодарение на останалите анотации Hibernate вече разбира, че говорим за table колона.
GO TO FULL VERSION