АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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

Читайте также:
  1. HMI/SCADA – создание графического интерфейса в SCADА-системе Trace Mode 6 (часть 1).
  2. III. Создание и обработка комплексного информационного объекта в виде презентации с использованием шаблонов.
  3. MathCad: понятие массива, создание векторов и матриц.
  4. V3: Создание советской политической системы. Конституция РСФСР 1918 г.
  5. Активный запрос на создание таблицы
  6. Билет 2. Условия создание привлекательного туристского продукта.
  7. Внешняя политика в царствование Александра III, создание франко-русского союза
  8. Вопрос 20. Создание специальных образовательных учреждений в дореволюционной России
  9. Вопрос 22Государственное регулирование охраны окружающей среды и создание рациональной системы природопользования.
  10. Г. ноябрь Создание партии «Союз 17 октября».
  11. Глава VIII. СОЗДАНИЕ ИМИДЖА
  12. ГОСУДАРСТВЕННОЕ СТРОИТЕЛЬСТВО В РОССИИ.СОЗДАНИЕ СССР

В примере, рассматривающем учебные курсы и студентов, их посещающих, будут созданы следующие классы 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, которая доступна на сайте разработчика.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.)