Объектные / реляционные отображения обычно определяются в документе XML. Этот файл отображения инструктирует Hibernate — как отобразить определенный класс или классы в таблицы базы данных?
Хотя многие пользователи Hibernate предпочитают писать XML вручную, существует целый ряд инструментов для создания документа сопоставления. К ним относятся XDoclet, Middlegen и AndroMDA для продвинутых пользователей Hibernate.
Давайте рассмотрим наш ранее определенный класс POJO, чьи объекты будут сохраняться в таблице, определенной в следующем разделе.
public class Employee { private int id; private String firstName; private String lastName; private int salary; public Employee() {} public Employee(String fname, String lname, int salary) { this.firstName = fname; this.lastName = lname; this.salary = salary; } public int getId() { return id; } public void setId( int id ) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName( String first_name ) { this.firstName = first_name; } public String getLastName() { return lastName; } public void setLastName( String last_name ) { this.lastName = last_name; } public int getSalary() { return salary; } public void setSalary( int salary ) { this.salary = salary; } }
Там будет одна таблица, соответствующая каждому объекту, который вы готовы предоставить постоянство. Рассмотрим выше объекты должны быть сохранены и извлечены в следующую таблицу RDBMS —
create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL, salary INT default NULL, PRIMARY KEY (id) );
Основываясь на двух вышеуказанных сущностях, мы можем определить следующий файл сопоставления, который инструктирует Hibernate, как сопоставить определенный класс или классы с таблицами базы данных.
<?xml version = "1.0" encoding = "utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name = "Employee" table = "EMPLOYEE"> <meta attribute = "class-description"> This class contains the employee detail. </meta> <id name = "id" type = "int" column = "id"> <generator class="native"/> </id> <property name = "firstName" column = "first_name" type = "string"/> <property name = "lastName" column = "last_name" type = "string"/> <property name = "salary" column = "salary" type = "int"/> </class> </hibernate-mapping>
Вы должны сохранить документ сопоставления в файле в формате <classname> .hbm.xml. Мы сохранили наш документ сопоставления в файле Employee.hbm.xml.
Давайте разберемся в деталях об элементах отображения, используемых в файле отображения —
-
Документ сопоставления представляет собой XML-документ, имеющий в качестве корневого элемента <hibernate-mapping> , который содержит все элементы <class> .
-
Элементы <class> используются для определения конкретных отображений из классов Java в таблицы базы данных. Имя класса Java указывается с помощью атрибута name элемента class, а имя таблицы базы данных указывается с помощью атрибута table.
-
Элемент <meta> является необязательным и может использоваться для создания описания класса.
-
Элемент <id> сопоставляет атрибут уникального идентификатора в классе с первичным ключом таблицы базы данных. Атрибут name элемента id ссылается на свойство в классе, а атрибут column ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.
-
Элемент <generator> в элементе id используется для автоматической генерации значений первичного ключа. Атрибут class элемента генератора установлен на native, чтобы позволить hibernate подобрать алгоритм идентичности, последовательности или hilo для создания первичного ключа в зависимости от возможностей базовой базы данных.
-
Элемент <property> используется для сопоставления свойства класса Java со столбцом в таблице базы данных. Атрибут имени элемента ссылается на свойство в классе, а атрибут столбца ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.
Документ сопоставления представляет собой XML-документ, имеющий в качестве корневого элемента <hibernate-mapping> , который содержит все элементы <class> .
Элементы <class> используются для определения конкретных отображений из классов Java в таблицы базы данных. Имя класса Java указывается с помощью атрибута name элемента class, а имя таблицы базы данных указывается с помощью атрибута table.
Элемент <meta> является необязательным и может использоваться для создания описания класса.
Элемент <id> сопоставляет атрибут уникального идентификатора в классе с первичным ключом таблицы базы данных. Атрибут name элемента id ссылается на свойство в классе, а атрибут column ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.
Элемент <generator> в элементе id используется для автоматической генерации значений первичного ключа. Атрибут class элемента генератора установлен на native, чтобы позволить hibernate подобрать алгоритм идентичности, последовательности или hilo для создания первичного ключа в зависимости от возможностей базовой базы данных.
Элемент <property> используется для сопоставления свойства класса Java со столбцом в таблице базы данных. Атрибут имени элемента ссылается на свойство в классе, а атрибут столбца ссылается на столбец в таблице базы данных. Атрибут type содержит тип отображения hibernate, при этом типы отображения преобразуются из Java в тип данных SQL.
Доступны другие атрибуты и элементы, которые будут использоваться в документе сопоставления, и я постараюсь охватить как можно больше при обсуждении других тем, связанных с Hibernate.