Hibernate實(shí)現(xiàn)many-to-many的映射關(guān)系
Hibernate多對多 關(guān)聯(lián)映射(many-to-many)
在操作和性能方面都不太理想,所以多對多的映射使用較少,實(shí)際使用中最好轉(zhuǎn)換成一對多的對象模型;
Hibernate會為我們創(chuàng)建中間關(guān)聯(lián)表,轉(zhuǎn)換成兩個(gè)一對多。
(1)一個(gè)最簡單的例子就是學(xué)生選課的數(shù)據(jù)表了
(2)Student.java
public class Course { private Integer id; private String name; private Set<StuCourse> stuCourses; //get/set方法 }
(3)Student.java
public class Student { private Integer id; private String name; private Set<StuCourse> stuCourses; <span style="font-family: Arial, Helvetica, sans-serif;">//get/set方法</span> }
(4)StuCourse.java學(xué)生選課表
package com.hsp.domain; public class StuCourse { private Integer id; private Student student; private Course course; private Integer grade; //get/set方法 }
(5)Course.hbm.xml文件
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hsp.domain"> <class name="Course"> <id name="id" type="java.lang.Integer"> <generator class="sequence"> <param name="sequence">course_seq</param> </generator> </id> <property name="name" type="java.lang.String"> <column name="name" length="64" /> </property> <!-- 配置one-to-many 表示一門課程可以對應(yīng)多個(gè)選課記錄 --> <set name="stuCourses"> <key column="course_id" /> <one-to-many class="StuCourse" /> </set> </class> </hibernate-mapping>
(6)Student.hbm.xml文件
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hsp.domain"> <class name="Student"> <id name="id" type="java.lang.Integer"> <generator class="sequence"> <param name="sequence">stu_seq</param> </generator> </id> <property name="name" type="java.lang.String"> <column name="name" length="64" /> </property> <!-- 這里我們配置了one-to-many 一個(gè)學(xué)生可以對應(yīng)多個(gè)選課記錄 --> <set name="stuCourses"> <key column="student_id" /> <!-- 這里的column是外鍵 --> <one-to-many class="StuCourse" /> <!-- many所對應(yīng)的表 --> </set> </class> </hibernate-mapping>
(7)StuCourse.hbm.xml文件
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hsp.domain"> <class name="StuCourse"> <id name="id" type="java.lang.Integer"> <generator class="sequence"> <param name="sequence">stucourse_seq</param> </generator> </id> <property name="grade" type="java.lang.Integer"> <column name="grade" length="3" /> </property> <many-to-one name="course" column="course_id" /> <many-to-one name="student" column="student_id" /> </class> </hibernate-mapping>
(8)hibernate.cfg.xml文件
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="connection.username">root</property> <property name="connection.url"> jdbc:oracle:thin:@127.0.0.1:1521:OracleDB </property> <property name="dialect"> org.hibernate.dialect.Oracle9Dialect </property> <property name="connection.password">root</property> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver </property> <property name="show_sql">true</property> <!-- 配置讓hibernate自動創(chuàng)建關(guān)系模型(表) --> <property name="hbm2ddl.auto">update</property> <mapping resource="com/hsp/domain/Course.hbm.xml" /> <mapping resource="com/hsp/domain/StuCourse.hbm.xml" /> <mapping resource="com/hsp/domain/Student.hbm.xml" /> </session-factory> </hibernate-configuration>
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- Hibernate核心類和接口的詳細(xì)介紹
- Hibernate的各種保存方式的區(qū)別詳解
- Hibernate中Session.get()方法和load()方法的詳細(xì)比較
- Hibernate用ThreadLocal模式(線程局部變量模式)管理Session
- hibernate測試時(shí)遇到的幾個(gè)異常及解決方法匯總
- Hibernate中使用HQLQuery查詢?nèi)繑?shù)據(jù)和部分?jǐn)?shù)據(jù)的方法實(shí)例
- Hibernate一級緩存和二級緩存詳解
- SpringBoot 使用hibernate validator校驗(yàn)
- Hibernate之CRUD操作實(shí)踐
- Hibernate連接三種數(shù)據(jù)庫的配置文件
相關(guān)文章
IDEA部署Docker鏡像的實(shí)現(xiàn)示例
本文主要介紹了IDEA部署Docker鏡像的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04UniApp?+?SpringBoot?實(shí)現(xiàn)微信支付和退款功能
這篇文章主要介紹了UniApp?+?SpringBoot?實(shí)現(xiàn)微信支付和退款功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06Java多線程的實(shí)現(xiàn)方式比較(兩種方式比較)
Java多線程實(shí)現(xiàn)方式有兩種,第一種是繼承Thread類,第二種是實(shí)現(xiàn)Runnable接口,兩種有很多差異,下面跟著本文一起學(xué)習(xí)吧2015-11-11SpringBoot結(jié)合mybatis-plus實(shí)現(xiàn)分頁的項(xiàng)目實(shí)踐
本文主要介紹了SpringBoot結(jié)合mybatis-plus實(shí)現(xiàn)分頁的項(xiàng)目實(shí)踐,主要基于MyBatis-Plus 自帶的分頁插件 PaginationInterceptor,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06java注釋轉(zhuǎn)json插件開發(fā)實(shí)戰(zhàn)詳解
這篇文章主要為大家介紹了java注釋轉(zhuǎn)json插件開發(fā)實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06