ich eine relationale DB haben, enthält Tabellen und alle Arten von Beziehungen (1> n, n> 1, 1> 1 und n> n) ..mit Beziehungen
ist eine dieser Tabellen nehmen lassen, die ist "Tabelle" Tabelle, diese Tabelle ist die komplizierteste Tabelle in meiner DB, da sie Beziehungen mit den meisten der Tabelle in der DB hat.
Die XML-Mapping-Datei "Department.hbm.xml" wie folgt aussieht:
<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>
Einige Male habe ich die Abteilung ohne Beziehungen holen müssen. Andere Zeit, ich muss Abteilungen mit einigen seiner Beziehungen abholen ...
Was ist der beste Weg, das zu tun .. berücksichtigen Sie die Leistung und die Anzahl der DB-Treffer.
Vielen Dank für Ihre Hilfe ... Aber wenn ich faul = "wahr" für irgendwelche Beziehungen, wird es nicht verfügbar, wenn ich es brauche, zum Beispiel: Lassen Sie uns die Beziehung zwischen Abteilung und ApplicationUser nehmen, die viele zu eins und sein Name = "applicationUserByManagerId", wenn ich es auf lazy = "true" setze, also wenn ich -in meinem Code- rufe: department.getApplicationUserByManagerId(); es wird einen Fehler werfen .. um diesen Fehler zu vermeiden, setze ich faul = "falsch", und fange an, das erste Problem zu konfrontieren, das ist: "bring die ganze Beziehung, obwohl ich sie nicht brauche", also was in diesem Fall zu tun ist. Bitte berate mich ... Ich danke Ihnen im Voraus ... Saeed – Saeed
Faulen Laden funktioniert nicht für Sie, weil die ISession zum Abrufen der Abteilung geschlossen ist, wenn Sie versuchen, auf die untergeordneten Sammlungen zuzugreifen. Es ist möglich, ein losgelöstes Objekt mit einer neuen ISession mithilfe von ISession.Lock neu zuzuordnen. Siehe http://intellect.dk/post/Detached-objects-in-nHibernate-and-Lazy-loading.aspx. Ich empfehle, alle Sammlungen außer einer aus der Abteilung zu entfernen und mit diesem einfachen Fall zu arbeiten, während Sie lernen, wie Sie in Ihrer App das Lazy-Loading am besten implementieren. –