日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Hibernate中的一对多XML映射

發布時間:2023/12/3 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate中的一对多XML映射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一對多關系指出一個實體的單個實例與另一個實體的多個實例相關聯。 換句話說,一個表中的每個記錄與另一個表中的多個記錄相關聯。

讓我們看看如何通過XML映射文件在Hibernate中定義這種關系。

1.實體關系圖

假設我們已經在數據庫中創建了學生表和部門表,下面是MySQL數據庫中學生表和部門表的實體關系圖

2. Maven依賴

首先,在我們的maven項目中設置pom.xml文件。

確保我們將以下依賴項添加到我們的pom.xml文件中。

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.30</version> </dependency> <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.3.5.Final</version> </dependency>

3.休眠配置設置

確保已配置hibernate.cfg.xml文件,并將其添加到類路徑中的項目結構中。

<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration><session-factory><!-- Database connection settings --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/sample_db</property><property name="connection.username">root</property><property name="connection.password">root</property><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><property name="hibernate.show_sql">true</property><mapping resource="Student.hbm.xml" /><mapping resource="Department.hbm.xml" /></session-factory> </hibernate-configuration>

4.實體類

在演示應用程序中,我們有兩個實體,即學生和部門,為此,我們在數據庫中有兩個表。 因此,我們需要創建與這些表相對應的實體類。

學生.java

package com.jcombat.entity;public class Student {private String studentId;private String firstName;private String lastName;private Department department;public String getStudentId() {return studentId;}public void setStudentId(String studentId) {this.studentId = studentId;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public Department getDepartment() {return department;}public void setDepartment(Department department) {this.department = department;}}

部門.java

package com.jcombat.entity;import java.util.Set;public class Department {private String depId;private String depName;private Set<Student> students;public String getDepId() {return depId;}public void setDepId(String depId) {this.depId = depId;}public String getDepName() {return depName;}public void setDepName(String depName) {this.depName = depName;}public Set<Student> getStudents() {return students;}public void setStudents(Set<Student> students) {this.students = students;} }

5. Hibernate Utility類

為初始的Hibernate配置創建HibernateUtil.java ,它為我們提供了SessionFactory的重要性。

HibernateUtil.java

package com.jcombat.utility;import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration;public class HibernateUtil {private static final SessionFactory sessionFactory = buildSessionFactory();@SuppressWarnings("deprecation")private static SessionFactory buildSessionFactory() {try {return new Configuration().configure().buildSessionFactory();} catch (Throwable ex) {System.err.println("Initial SessionFactory creation failed." + ex);throw new ExceptionInInitializerError(ex);}}public static SessionFactory getSessionFactory() {return sessionFactory;} }

6.休眠映射XML

為每個實體創建休眠映射文件。

Student.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.jcombat.entity"><class name="Student" table="student"><id name="studentId" column="ID"><generator class="native" /></id><property name="firstName" column="FNAME" /><property name="lastName" column="LNAME" /><many-to-one name="department" class="com.jcombat.entity.Department" fetch="select"><column name="DEPT_ID" not-null="true" /></many-to-one></class> </hibernate-mapping>

Department.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.jcombat.entity"><class name="Department" table="department"><id name="depId" column="DEPT_ID"><generator class="native" /></id><property name="depName" column="DEP_NAME" /><set name="students" table="student" inverse="true" cascade="save-update" lazy="true" fetch="select"><key><column name="DEPT_ID" not-null="true" /></key><one-to-many class="com.jcombat.entity.Student" /></set></class> </hibernate-mapping>

請注意,我們使用Set來映射與部門關聯的學生。

集合映射中經常使用“ Cascade”關鍵字來自動管理集合的狀態。 因此,如果有一組與特定部門相關聯的Student,并且我們保留了Department對象的狀態,則所有關聯的子Student對象也會自動保留,從而節省了手動保留它們的人工。 我們當前的示例也會發生同樣的情況。

7.最終項目結構

完成上述所有步驟后,請參考以下項目結構。

7.執行

我們快完成了。 剩下的唯一部分是從我們將執行應用程序的位置創建客戶端類。 因此,讓我們創建一個MainApp客戶端類。

MainApp.java

package com.jcombat.hibernate;import java.util.HashSet; import java.util.Set;import org.hibernate.Session; import org.hibernate.SessionFactory;import com.jcombat.entity.Department; import com.jcombat.entity.Student; import com.jcombat.utility.HibernateUtil;public class MainApp {public static void main(String[] args) {SessionFactory sf = HibernateUtil.getSessionFactory();Session session = sf.openSession();session.beginTransaction();Department department = new Department();department.setDepName("Electronics");Student student1 = new Student();student1.setFirstName("Abhimanyu");student1.setLastName("Prasad");student1.setDepartment(department);Student student2 = new Student();student2.setFirstName("Abhishek");student2.setLastName("Kumar");student2.setDepartment(department);Set<Student> studSet = new HashSet<Student>();studSet.add(student1);studSet.add(student2);department.setStudents(studSet);session.save(department);session.getTransaction().commit();session.close();} }

右鍵單擊該類,然后將其作為“ Java應用程序”運行。 我們看到以下條目已登錄到IDE控制臺。

Hibernate: insert into department (DEP_NAME) values (?) Hibernate: insert into student (FNAME, LNAME, DEPT_ID) values (?, ?, ?) Hibernate: insert into student (FNAME, LNAME, DEPT_ID) values (?, ?, ?)

驗證數據庫中的各個表是否有添加的條目。

  • 下載源代碼

翻譯自: https://www.javacodegeeks.com/2015/12/one-many-xml-mapping-hibernate.html

總結

以上是生活随笔為你收集整理的Hibernate中的一对多XML映射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。