Как я упоминал ранее,
каждая сущность нуждается в уникальном ключе, который будет идентифицировать
её. Ключи могут быть простыми,
состоящими из одного поля сущности или
составными. Большинство статей в интернете приводят примеры только с простым
ключом, как будто бы не существует такой надобности как составные ключи,
состоящие из нескольких полей, давайте рассмотрим,
как все реализуется в hibernate, начнем с простых ключей. Любой ключ должен быть объявлен у сущности аннотацией @Id, хотя могут существовать сущности и без ключа, но в документации по hibernate очень не рекомендуют так поступать. Типы данных, которые могут выступать в роли
ключа, их не много, это простые типы byte, char, int, short, long их
классы обертки Byte, Character , Integer, Short, Long, тип String, два временных типа - java.util.Date, java.sql.Date и тип java.math.BigInteger а так же любые сериализуемые объекты,
реализующие интерфейс Serializable. Автоматическую генерацию значения ключа можно
применить только к простому ключу,
сложный ключ приходится “генерировать”
вручную. Давайте рассмотрим пример с
работой сложного ключа, опишем класс ключа, он должен соответствовать всем
требованиям, которые применимы при описании сущности, т.е. реализовать
интерфейс Serializable,
переопределять методы toString(),
Equals(), HashCode(), подробный список
требований смотрите в главе 2 “Наш первый проект”. И так опишем класс Key:
public class
Key implements Serializable {
private Long id1;
private Long id2;
public Key(Long id1, Long id2) {
this.id1 = id1;
this.id2 = id2;
}
public Key() {
}
…
Геттеры и Сеттеры
}
Описываем
в сущности Person
ключ класса Key, при помощи аннотации @Id:
@Entity
@Table(name =
"Persons")
public class
Person implements Serializable {
static final long serialVersionUID =
-7593775012501239455L;
@Id
private Key id1;
…
}
В программе создаем объект Key и устанавливаем вручную поле id1 и работаем
так же как с простым ключом, ни
чего сложного и нового:
session.getTransaction().begin();
Person person = new
Person();
person.setFirstName("Vitaly");
person.setSecondName("Lopanov");
Key key = new
Key(1L,1L);
person.setId1(key);
session.save(person);
System.out.printf("Insert Person: %s\n", person);
Key id =
person.getId1();
session.getTransaction().commit();
session.close();
Комментариев нет:
Отправить комментарий