Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Создание POJO-классов




В примере, рассматривающем учебные курсы и студентов, их посещающих, будут созданы следующие классы POJO (Plain Ordinary Java Objects):

Класс Course – хранит информацию об учебном курсе (название курса
и список студентов, записанных на курс);

Класс Student – содержит информацию о студенте (имя, фамилия).

Кроме указанных выше полей, оба эти класса имеют поле id. Это свойство содержит значение столбца первичного ключа в таблице базы данных. Такое свойство может называться любым именем, и иметь любой примитивный тип,
тип класса-оболочки базового типа, а также типы java.lang.String
и java.util.Date. Свойство-идентификатор не является обязательным для класса, можно не создавать его и дать Hibernate самостоятельно следить за идентификацией объекта.

/* пример # 1: POJO-класс сущности: Course.java */

package courses.hiber;

import java.util.Set;

 

public class Course {

private Integer id;

private String title;

private Set students;

 

public Integer getId() {

return id;

}

protected void setId(Integer id) { /*в данном случае использовать protected как спецификатор доступа, поскольку данное поле не бу­дет определяться вручную, а значение генерируется автоматически в соответствии с mapping-файлом. Сама технология Hibernate имеет доступ к по­лям и методам, имеющим любые спецификаторы доступа(friendly, public, protected, private)*/

this. id = id;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this. title = title;

}

public Set getStudents() {

return students;

}

public void setStudents(Set students) {

this. students = students;

}

}

/* пример # 2: POJO-класс сущности: Student.java */

package courses.hiber;

 

public class Student {

private Integer id;

private String lastname;

private String login;

private String password;

 

public Integer getId() {

return id;

}

protected void setId(Integer id) {

this. id = id;

}

public String getLogin() {

return login;

}

public void setLogin(String login) {

this. login = login;

}

public String getLastname() {

return lastname;

}

public void setLastname(String lastname) {

this. lastname = lastname;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this. password = password;

}

}

После создания таблиц в базе данных задается соответствие между POJO-классами и таблицами. Объектно-реляционный mapping описывается в виде XML-документа hbm.xml в каталоге, содержащем *.class файл соответствующего класса: для Tomcat - это WEB-INF\classes\’каталог_пакета’, а для Ant - bin\’каталог_пакета’. Эти файлы создаются для того, чтобы обеспечить Hibernate данными о том, какие объекты по каким таблицам базы данных создавать и как их инициализировать. Язык описания mapping-файла ориентирован на Java, следовательно, mapping конструируется вокруг объявлений java-классов, а не таблиц БД.

/* пример # 3: Mapping-файл для класса courses.hiber.Course */

<?xml version="1.0 "?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

< hibernate-mapping >

< class name= "courses.hiber.Course" table= "course" >

< id name= "id" column= "id" type= "java.lang.Integer" >

< generator class= "increment"/ >

< /id >

< property name= "title" type= "java.lang.String" />

< set name= "students" table= "course_student"

cascade= "all" >

< key column= "course_id" />

< many-to-many column= "student_id" class= "courses.hiber.Student" />

</ set >

< /class >

< /hibernate-mapping >

/* пример # 4: Mapping-файл для класса courses.hiber.Student */

<? xml version ="1.0"?>

<! DOCTYPE hibernate-mapping PUBLIC "- //Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

< hibernate-mapping package = " courses.hiber ">

< class name=" Student " table=" student ">

< id name ="id" column ="id" type="java.lang.Integer" >

< generator class="native"/>

< /id >

< property name ="lastname" type ="java.lang.String" />

< property name ="login" type ="java.lang.String" />

< property name ="password" type ="java.lang.String" />

< /class >

< /hibernate-mapping >

Пояснения по приведенному коду:

<class name="courses.hiber.Course"> – необходимо указать класс, который будет использоваться при работе с указанной ниже таблицей базы данных. Причём есть две возможности указать пакет расположения класса: либо явно указать полное имя класса, либо указать атрибут package в теге < hibernate - mapping > ;

table="course" – указывается таблица на сервере баз данных, к которой будет вестись обращение. Если данный атрибут не указан, то за название таблицы берется название класса, т.е. в данном случае COURSE, поэтому в данном примере атрибут table можно было опустить;

<id name="id" column="id" type="java.lang.Integer">

<generator class="native"/>

</id> – указывается соответствие поля класса и столбца в базе данных, которые являются основными идентификаторами, т.е. уникальны, не имеют значений null. Тег <generator> указывает способ генерация значений в данном столбце, возможные его значения: increment, identity, sequence, hilo,, seqhilo, uuid, guid, native, assigned, select, foreign;

<property name="title" column="column" type="java.lang.String"/> – указывается соответствие полей класса
и столб­цов базы данных. В
mapping-файле несколько параметров может быть вы­делено как id. Это позволяет получать объекты из БД, удалять, создавать их без написания SQL-запросов. Процесс реализации будет продемонстрирован ниже.

Кроме того, следует обратить внимание на следующие теги и их параметры:

< many-to-one name= "propertyName" column= "column_name" class= "ClassName" lazy= "proxy|no-proxy|false" > – данный тег используется для указания связи таблиц (классов). К примеру, объект одного класса содержит ссылку на объект другого класса, а последний, в свою очередь, содержит коллекцию объектов первого класса. Параметры name и column аналогичным параметрам в предыдущих тегах и несут такой же смысл. Атрибут class указывает, какой класс будет связан с данным. Параметр lazy в большей части случаев является существенным, т.е. его необходимо выставлять вручную, поскольку значение по умолчанию, proxy, означает, что объекты класса, с которым связан данный, не будут автоматически загружены в память.

< set name=" propertyName " inverse= "true" >

< key column= "foreignId"/ >

< one-to-many class= "ClassName"/ >

< /set > - является интерпретацией коллекции «множество».

Необходимо строгое соответствие между столбцами таблиц базы данных
и mapping-файлами.

При изменении базы данных необходимо следить за изменением mapping-файлов и соответствующих им классов, т.к. такие ошибки достаточно сложно выявить.

Более подробно о рассмотренных и прочих тегах и их атрибутах вы можете прочитать в документации по технологии Hibernate, которая доступна на сайте разработчика.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных