|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Создание POJO-классовВ примере, рассматривающем учебные курсы и студентов, их посещающих, будут созданы следующие классы POJO (Plain Ordinary Java Objects): Класс Course – хранит информацию об учебном курсе (название курса Класс Student – содержит информацию о студенте (имя, фамилия). Кроме указанных выше полей, оба эти класса имеют поле id. Это свойство содержит значение столбца первичного ключа в таблице базы данных. Такое свойство может называться любым именем, и иметь любой примитивный тип, /* пример # 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"/> – указывается соответствие полей класса Кроме того, следует обратить внимание на следующие теги и их параметры: < 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-файлов и соответствующих им классов, т.к. такие ошибки достаточно сложно выявить. Более подробно о рассмотренных и прочих тегах и их атрибутах вы можете прочитать в документации по технологии Hibernate, которая доступна на сайте разработчика. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |