Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java_sp.doc
Скачиваний:
48
Добавлен:
29.10.2018
Размер:
1 Мб
Скачать
☆

14. Кастомизация мэппинга персистентных классов на поля и таблички бд.

Мэппинг пишется в виде xml-файла следующей структуры

<class name="logic.Bus" table="busses">

<id column="bus_id" name="id" type="java.lang.Long">

<generator class="increment"/>

</id>

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

<set name="drivers" table="busDriver" lazy="false">

<key column="bus_id"/>

<many-to-many column="driver_id" class="logic.Driver"/>

</set>

</class>

Для того, чтобы не писать полное имя класса, можно указать используемый пакет.

name: Полное наименование Java класса персистентного класса или интерфейса.

table: Наименование таблицы БД.

Id: описывает идентификатор. Параметр column указывает на какую колонку в таблице будет ссылаться поле id нашего объекта, так же указываем класс и указываем generator, который отвечает за генерацию id.

Property: описывает простое поле нашего объекта, в качестве параметров указываем имя поля, его класс и имя колонки в таблице.

Set: описывает поле в котором содержится некий набор(коллекция) объектов. Тег содержит параметр name - имя поля нашего объекта, параметр table - имя таблицы связи(в случае отношения многие ко многим) и параметр lazy. Так называемые ленивые коллекци. Когда мы в параметре lazy указываем значечение false, то у нас при получении объекта Route из базы вместе с объектом достается и коллекция объектов Bus, так как busses это поле объекта Route. А если в качестве параметра мы указываем значение true, то коллекция объектов Bus не вытаскивается, для ее получения надо явно вызывать метод route.getBusses().

Тег key имеет параметр column, который говорит, на какую колонку в таблице связи будет ссылаться поле нашего объекта.

Тег many-to-many описывает связь типа многие ко многим, в качестве параметров тег использует column - имя колонки второй колонки в таблице связи и параметр class, указывающий какого класса будут объеты на той стороне.

15. Объектно-реляционное отображение. Отображение реляционных связей many-to-many, one-to-many, one-to-one.

Many-to-many

<many-to-many

column="column_name" (1)

class="ClassName" (2)

outer-join="true|false|auto" (3)

/>

(1)

column (необязательно): Имя колонки.

(2)

class (необязательно - по умолчанию определяется рефлексией исходя из типа поля): Имя ассоциированного класса.

(3)

outer-join (optional - defaults to auto): enables outer-join fetching for this association when hibernate.use_outer_join is set.

One-to-many

<one-to-many

column="column_name" (1)

class="ClassName" (2)

outer-join="true|false|auto" (3)

/>

(1)

column (необязательно): Имя колонки.

(2)

class (необязательно - по умолчанию определяется рефлексией исходя из типа поля): Имя ассоциированного класса.

(3)

outer-join (optional - defaults to auto): enables outer-join fetching for this association when hibernate.use_outer_join is set.

Many-to-one

Обычная связь с другим персистентным классов объявляется используя элемент many-to-one. В реляционных терминах это ассоциация многих к одному. В действительности это просто ссылка на объект.

<many-to-one

name="propertyName" (1)

column="column_name" (2)

class="ClassName" (3)

cascade="all|none|save-update|delete" (4)

outer-join="true|false|auto" (5)

update="true|false" (6)

insert="true|false" (6)

property-ref="propertyNameFromAssociatedClass" (7)

access="field|property|ClassName" (8)

/>

(1)

name: Имя свойства.

(2)

column (необязательно): Имя колонки.

(3)

class (необязательно - по умолчанию тип поля определяется через рефлексию): Имя ассоциированного класса.

(4)

cascade (необязательно): Определяет, какая операция будет выполняться каскадом от родительского объекта к ассоциированному.

(5)

outer-join (необязательно - по умолчанию auto): Задействует извлечение ассоциированных объектов, используя объединения outer-join если опция hibernate.use_outer_join конфигурационного файла включена.

(6)

update, insert (необязательно - по умолчанию true) определяет то, что отображаемые колонки будут включены в SQL-запросы UPDATE и/или INSERT. Установка обоих свойств в false позволяет задавать значение этого свойства либо из другого свойства, которое отображено в той же колонке/колонках, либо посредством триггера, либо другим приложением.

(7)

property-ref: (необязательно) Имя ключевого свойства ассоциированного класса. По этому свойству будет происходить связывание (join). Если не указано, то используется первичный ключ ассоциированного класса.

(8)

access (необязательно - по умолчанию property): Стратегия, которую использует Hibernate для доступа к значению данного поля.

Атрибут cascade может принимать следующие значения: all, save-update, delete, none. Установка значения отличного от none повлечет определенные операции над ассоциированным (дочерним) объектом. Атрибут outer-join может принимать три следующих значения:

  • auto (по умолчанию) извлекает ассоциированные объекты используя outer join если ассоциированный класс не имеет прокси.

  • true Всегда извлекать ассоциированные объекты используя outer join.

  • false Никогда не извлекать ассоциированные объекты используя outer join.

Типичное объявление ассоциации many-to-one выглядит так

<many-to-one name="product" class="Product" column="PRODUCT_ID"/>

One-to-one

Ассоциация "один к одному" с другим персистентным классом можно объявить, используя элемент one-to-one.

<one-to-one

name="propertyName" (1)

class="ClassName" (2)

cascade="all|none|save-update|delete" (3)

constrained="true|false" (4)

outer-join="true|false|auto" (5)

property-ref="propertyNameFromAssociatedClass" (6)

access="field|property|ClassName" (7)

/>

(1)

name: Имя свойства.

(2)

class (необязательно - по умолчанию определяется рефлексией исходя из типа поля): Имя ассоциированного класса.

(3)

cascade (необязательно) определяет какая операция будет выполняться каскадом от родительского объекта к ассоциированному.

(4)

constrained (необязательно) определяет то, что внешний ключ, ссылающийся на таблицу ассоциированного класса, ограничен первичным ключом этой таблицы. Эта опция влияет на порядок, в котором выполняются каскадные операции save() и delete() (а так же используется утилитой экспортирующей схему - schema export tool).

(5)

outer-join (необязательно - по умолчанию auto): Задействует извлечение ассоциированных объектов, используя объединения outer-join если опция hibernate.use_outer_join конфигурационного файла включена.

(6)

property-ref: (необязательно) Имя свойства ассоциированного класса, которое входит в первичный ключ данного класса. Если не указано, то используется первичный ключ ассоциированного класса.

(7)

access (необязательно, по умолчанию property): Стратегия, которую должен использовать Hibernate для доступа к данному полю.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]