Спит с отношениями - PullRequest
       2

Спит с отношениями

1 голос
/ 28 апреля 2009

У меня есть реляционная БД, содержит таблицы и все виды отношений (1> n, n> 1, 1> 1 и n> n) ..

Давайте возьмем одну из этих таблиц, которая является таблицей "Отдел", эта таблица является самой сложной таблицей в моей БД, поскольку она связана с большей частью таблицы в БД.

Файл отображения XML «Department.hbm.xml» выглядит следующим образом:

<hibernate-mapping>
 <class catalog="MOIDB"
  name="com.ebla.moi.correspondence.model.entity.db.Department"
  schema="dbo" table="Department">
  <id name="id" type="java.lang.Integer">
   <column name="Id"/>
   <generator class="increment"/>
  </id>
  <many-to-one
   class="com.ebla.moi.correspondence.model.entity.db.Department"
   fetch="select" name="department">
   <column name="Parent"/>
  </many-to-one>
  <many-to-one
   class="com.ebla.moi.correspondence.model.entity.db.ApplicationUser"
   fetch="join" lazy="false" name="applicationUserByManagerId">
   <column name="Manager_Id"/>
  </many-to-one>
  <many-to-one
   class="com.ebla.moi.correspondence.model.entity.db.ApplicationUser"
   fetch="join" lazy="false" name="applicationUserByAssistantId">
   <column name="Assistant_Id"/>
  </many-to-one>
  <property generated="never" lazy="false" name="description" type="java.lang.String">
   <column length="80" name="Description" not-null="true"/>
  </property>
  <property generated="never" lazy="false" name="type" type="java.lang.Integer">
   <column name="Type" not-null="true"/>
  </property>
  <property generated="never" lazy="false" name="prefix" type="java.lang.String">
   <column length="20" name="Prefix" unique="true"/>
  </property>
  <property generated="never" lazy="false" name="serialPrefix" type="java.lang.String">
   <column length="20" name="Serial_Prefix"/>
  </property>
  <property generated="never" lazy="false" name="telephoneNumbers" type="java.lang.String">
   <column length="100" name="Telephone_Numbers"/>
  </property>
  <property generated="never" lazy="false" name="faxNumbers" type="java.lang.String">
   <column length="100" name="Fax_Numbers"/>
  </property>
  <property generated="never" lazy="false" name="smsMaxTime" type="java.lang.Integer">
   <column default="30" name="SMS_Max_Time"/>
  </property>
  <property generated="never" lazy="false" name="emailMaxTime" type="java.lang.Integer">
   <column default="30" name="Email_Max_Time"/>
  </property>
  <property generated="never" lazy="false" name="hasCorrespondence" type="java.lang.Boolean">
   <column name="Has_Correspondence" not-null="true"/>
  </property>
  <property generated="never" lazy="false" name="email" type="java.lang.String">
   <column length="50" name="Email"/>
  </property>
  <property generated="never" lazy="false" name="logoImageName" type="java.lang.String">
   <column length="50" name="Logo_Image_Name"/>
  </property>
  <set inverse="true" name="departmentDocumentTypeSerials" sort="unsorted">
   <key>
    <column name="Department_Id" not-null="true"/>
   </key>
   <one-to-many class="com.ebla.moi.correspondence.model.entity.db.DepartmentDocumentTypeSerial"/>
  </set>
  <set inverse="true" name="departmentGlobalVariableses" sort="unsorted">
   <key>
    <column name="Department_Id" not-null="true"/>
   </key>
   <one-to-many class="com.ebla.moi.correspondence.model.entity.db.DepartmentGlobalVariables"/>
  </set>
  <set inverse="true" name="departmentFiles" sort="unsorted">
   <key>
    <column name="Department_Id" not-null="true"/>
   </key>
   <one-to-many class="com.ebla.moi.correspondence.model.entity.db.DepartmentFile"/>
  </set>
  <set catalog="MOIDB" name="applicationUsers" schema="dbo"
   sort="unsorted" table="Application_User_Department">
   <key>
    <column name="Department_Id" not-null="true"/>
   </key>
   <many-to-many class=""
    entity-name="com.ebla.moi.correspondence.model.entity.db.ApplicationUser" unique="false">
    <column name="Application_User_Id" not-null="true"/>
   </many-to-many>
  </set>
  <set inverse="true" name="departments" sort="unsorted">
   <key>
    <column name="Parent"/>
   </key>
   <one-to-many class="com.ebla.moi.correspondence.model.entity.db.Department"/>
  </set>
  <set inverse="true" lazy="false" name="departmentClassifications" sort="unsorted">
   <key>
    <column name="Department_Id" not-null="true"/>
   </key>
   <one-to-many class="com.ebla.moi.correspondence.model.entity.db.DepartmentClassification"/>
  </set>
  <set inverse="true" lazy="false" name="depCorrespondenceSites" sort="unsorted">
   <key>
    <column name="Department_Id" not-null="true"/>
   </key>
   <one-to-many class="com.ebla.moi.correspondence.model.entity.db.DepCorrespondenceSite"/>
  </set>
 </class>
</hibernate-mapping>

Иногда мне нужно забрать отдел без каких-либо отношений. В другой раз мне нужно выбрать отделы с некоторыми из его отношений ...

Каков наилучший способ сделать это ... примите во внимание производительность и количество обращений к БД.

1 Ответ

1 голос
/ 28 апреля 2009

Включение отложенной загрузки с помощью установки lazy = "true" - лучший способ. Есть ли причина, по которой вы установили значение false на протяжении всего своего отображения?

Другой подход состоит в том, чтобы не моделировать все отношения в вашей объектной модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...