<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        Hibernate關(guān)聯(lián)關(guān)系映射(單向篇)

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 16:26:22
        文檔

        Hibernate關(guān)聯(lián)關(guān)系映射(單向篇)

        Hibernate關(guān)聯(lián)關(guān)系映射(單向篇):Hibernate關(guān)聯(lián)關(guān)系可分為單向關(guān)聯(lián)和雙向關(guān)聯(lián)兩大類。單向關(guān)聯(lián)可以分為一對一、一對多、多對一和多對多4種關(guān)聯(lián)方式,而多向關(guān)聯(lián)可以分為一對一、一對多和多對多3種關(guān)聯(lián)方式。 Hibernate連接管理類HibernateUtil.java public class Hiberna
        推薦度:
        導(dǎo)讀Hibernate關(guān)聯(lián)關(guān)系映射(單向篇):Hibernate關(guān)聯(lián)關(guān)系可分為單向關(guān)聯(lián)和雙向關(guān)聯(lián)兩大類。單向關(guān)聯(lián)可以分為一對一、一對多、多對一和多對多4種關(guān)聯(lián)方式,而多向關(guān)聯(lián)可以分為一對一、一對多和多對多3種關(guān)聯(lián)方式。 Hibernate連接管理類HibernateUtil.java public class Hiberna

        Hibernate關(guān)聯(lián)關(guān)系可分為單向關(guān)聯(lián)和雙向關(guān)聯(lián)兩大類。單向關(guān)聯(lián)可以分為一對一、一對多、多對一和多對多4種關(guān)聯(lián)方式,而多向關(guān)聯(lián)可以分為一對一、一對多和多對多3種關(guān)聯(lián)方式。 Hibernate連接管理類HibernateUtil.java public class HibernateUtil { private st

        Hibernate關(guān)聯(lián)關(guān)系可分為單向關(guān)聯(lián)和雙向關(guān)聯(lián)兩大類。單向關(guān)聯(lián)可以分為一對一、一對多、多對一和多對多4種關(guān)聯(lián)方式,而多向關(guān)聯(lián)可以分為一對一、一對多和多對多3種關(guān)聯(lián)方式。

        Hibernate連接管理類HibernateUtil.java

        public class HibernateUtil {
         private static SessionFactory sessionFactory;
        
         private static final ThreadLocal threadLocal = new ThreadLocal();
        
         static{
         try{
         Configuration cfg = new Configuration().configure();
         sessionFactory = cfg.buildSessionFactory();
         }catch(Throwable ex){
         throw new ExceptionInInitializerError(ex);
         }
         }
        
         public static SessionFactory getSessionFactory(){
         return sessionFactory;
         }
        
         public static Session getSession() throws HibernateException{
         Session session = (Session)threadLocal.get();
         if(session == null || !session.isOpen()){
         session = (sessionFactory != null)?sessionFactory.openSession():null;
         threadLocal.set(session);
         }
        
         return session;
         }
        
         public static void closeSession() throws HibernateException{
         Session session = (Session)threadLocal.get();
         threadLocal.set(null);
         if(session != null){
         session.close();
         }
         }
        
         public static void shutdown(){
         getSessionFactory().close();
         }
        
        }

        1.單向的一對一關(guān)聯(lián)

        (1)通過主鍵關(guān)聯(lián)

        通過主鍵關(guān)聯(lián),是指兩個數(shù)據(jù)表之間通過主鍵建立一對一的關(guān)聯(lián)關(guān)系。這兩張表的主鍵值是相同的,一張表改動時,另一張也會相關(guān)的發(fā)生改變,從而避免多余字段被創(chuàng)建,但基于主鍵關(guān)聯(lián)的持久化類(其對應(yīng)的數(shù)據(jù)表稱為從表)不能擁有自己的主鍵生成策略,它的主鍵由關(guān)聯(lián)類負(fù)責(zé)生成。另外,增加one-to-one元素來關(guān)聯(lián)屬性,必須為one-to-one元素增加constrained=”true”屬性,表明該類主鍵由關(guān)聯(lián)類生成。

        示例:

        實體類:

        User.java

        public class User {
         private int userid;
         private String name;
         private String password;
         private Address address;
         public int getUserid() {
         return userid;
         }
         public void setUserid(int userid) {
         this.userid = userid;
         }
         public String getName() {
         return name;
         }
         public void setName(String name) {
         this.name = name;
         }
         public String getPassword() {
         return password;
         }
         public void setPassword(String password) {
         this.password = password;
         }
         public Address getAddress() {
         return address;
         }
         public void setAddress(Address address) {
         this.address = address;
         } 
        }

        Address.java

        public class Address {
         private int addressid;
         private String addressinfo;
         public int getAddressid() {
         return addressid;
         }
         public void setAddressid(int addressid) {
         this.addressid = addressid;
         }
         public String getAddressinfo() {
         return addressinfo;
         }
         public void setAddressinfo(String addressinfo) {
         this.addressinfo = addressinfo;
         }
        
        
        }

        表結(jié)構(gòu):

        user表:

        這里寫圖片描述

        address表:

        這里寫圖片描述

        配置文件:

        User.hbm.xml

        
         
         
         
         address
         
         
        
         
         
         
         
         
        
         
        

        Address.hbm.xml

        
         
         
         
         
        
         
         
        
        
         
        

        測試類Test.java

        public class Test {
         public static void main(String[] args){
         Session session = HibernateUtil.getSession();
         Transaction tx = session.beginTransaction();
        
         User u = new User();
         u.setName("sbw");
         u.setPassword("123");
        
         Address a = new Address();
         a.setAddressinfo("heu");
         u.setAddress(a);
        
         session.save(a);
         session.save(u);
         tx.commit();
        
         HibernateUtil.closeSession();
        
         }
        }

        運行結(jié)果:

        這里寫圖片描述

        (2)通過外鍵關(guān)聯(lián)

        通過外鍵關(guān)聯(lián)時兩張數(shù)據(jù)表的主鍵是不同的,通過在一張表中添加外鍵列來保持一對一的關(guān)系。配置外鍵關(guān)聯(lián)關(guān)系時需要使用many-to-one元素。因為通過外鍵關(guān)聯(lián)的一對一關(guān)系,本質(zhì)上是多對一關(guān)系的特例。因此,只需在many-to-one元素中增加unique=“true”屬性即可,這相當(dāng)于在多的一端增加了唯一性的約束,表示多的一端也必須是唯一的,這樣就變成為單向的一對一關(guān)系了。

        示例:

        實體類與通過主鍵關(guān)聯(lián)相同。

        表結(jié)構(gòu):

        user表

        這里寫圖片描述

        address表

        這里寫圖片描述

        配置文件:

        User.hbm.xml

        
         
         
         
         
        
         
         
         
         
        
         
        
         
        

        Address.hbm.xml

        
         
         
         
         
        
         
         
        
        
         
        

        測試類與通過主鍵關(guān)聯(lián)一樣

        運行結(jié)果:

        這里寫圖片描述

        2.單向一對多關(guān)聯(lián)

        單向的一對多關(guān)聯(lián)映射關(guān)系主要是通過外鍵來關(guān)聯(lián)的。一對多的關(guān)聯(lián)映射是在表示多的一方的數(shù)據(jù)表中增加一個外鍵,并由“一”的一方指向“多”的一方。單向的一對多關(guān)聯(lián)的持久化類里需要包含一個集合屬性,在“一”的一方訪問“多”的一方時,“多”的一方將以集合的形式來體現(xiàn)。

        示例:

        實體類:

        User.java

        public class User {
         private int userid;
         private String name;
         private String password;
         private Set address = new HashSet();
        
         public int getUserid() {
         return userid;
         }
         public void setUserid(int userid) {
         this.userid = userid;
         }
         public String getName() {
         return name;
         }
         public void setName(String name) {
         this.name = name;
         }
         public String getPassword() {
         return password;
         }
         public void setPassword(String password) {
         this.password = password;
         }
         public Set getAddress() {
         return address;
         }
         public void setAddress(Set address) {
         this.address = address;
         } 
        }

        Address.java

        public class Address {
         private int addressid;
         private String addressinfo;
        
         public int getAddressid() {
         return addressid;
         }
         public void setAddressid(int addressid) {
         this.addressid = addressid;
         }
         public String getAddressinfo() {
         return addressinfo;
         }
         public void setAddressinfo(String addressinfo) {
         this.addressinfo = addressinfo;
         } 
        }

        表結(jié)構(gòu):

        User表

        這里寫圖片描述

        Address表

        這里寫圖片描述

        配置文件

        User.hbm.xml

        
         
         
         
         
        
         
         
         
         
        
         
         
         
         
        
         
         
        
         
        

        Address.hbm.xml

        
         
         
         
         
        
         
         
        
        
         
        

        測試代碼

        Test.java

        public class Test {
         public static void main(String[] args){
         Session session = HibernateUtil.getSession();
         Transaction tx = session.beginTransaction();
        
         User u = new User();
         u.setName("sbw");
         u.setPassword("123");
        
         Address a = new Address();
         a.setAddressinfo("heu");
         Address a1 = new Address();
         a1.setAddressinfo("hrb");
        
         u.getAddress().add(a);
         u.getAddress().add(a1);
        
         session.save(a);
         session.save(a1);
         session.save(u);
         tx.commit();
        
         HibernateUtil.closeSession();
        
         }
        }

        運行結(jié)果:

        這里寫圖片描述

        3.單向的多對一關(guān)聯(lián)

        單向的多對一關(guān)聯(lián)映射關(guān)系也是通過外鍵來關(guān)聯(lián)的。多對一的映射方式類似于一對多的映射方式,不過它的映射關(guān)系是由“多”的一方指向“一”的一方。在表示“多”的一方的數(shù)據(jù)表中增加一個外鍵來指向表示“一”的一方的數(shù)據(jù)表,“一”的一方作為主表,”多“的一方作為從表。

        示例:

        實體類

        User.java

        public class User {
         private int userid;
         private String name;
         private String password;
         private Address address = new Address();
        
         public int getUserid() {
         return userid;
         }
         public void setUserid(int userid) {
         this.userid = userid;
         }
         public String getName() {
         return name;
         }
         public void setName(String name) {
         this.name = name;
         }
         public String getPassword() {
         return password;
         }
         public void setPassword(String password) {
         this.password = password;
         }
         public Address getAddress() {
         return address;
         }
         public void setAddress(Address address) {
         this.address = address;
         } 
        }

        Address.java

        public class Address {
         private int addressid;
         private String addressinfo;
        
         public int getAddressid() {
         return addressid;
         }
         public void setAddressid(int addressid) {
         this.addressid = addressid;
         }
         public String getAddressinfo() {
         return addressinfo;
         }
         public void setAddressinfo(String addressinfo) {
         this.addressinfo = addressinfo;
         } 
        }

        表結(jié)構(gòu):

        user表

        這里寫圖片描述

        address表

        這里寫圖片描述

        配置文件:

        User.hbm.xml

        
         
         
         
         
        
         
         
         
         
        
          
        
         
        

        Address.hbm.xml

        
         
         
         
         
        
         
         
        
        
         
        

        測試類Test.java

        public class Test {
         public static void main(String[] args){
         Session session = HibernateUtil.getSession();
         Transaction tx = session.beginTransaction();
        
         User u = new User();
         u.setName("sbw");
         u.setPassword("123");
        
         User u1 = new User();
         u.setName("gaoya");
         u.setPassword("456");
        
         Address a = new Address();
         a.setAddressinfo("heu");
        
         u.setAddress(a);
         u1.setAddress(a);
        
         session.save(a);
         session.save(u);
         session.save(u1);
         tx.commit();
        
         HibernateUtil.closeSession();
        
         }
        }

        測試結(jié)果:

        這里寫圖片描述

        4.單向的多對多關(guān)聯(lián)

        多對多關(guān)聯(lián)在數(shù)據(jù)庫中是比較常見的,它利用中間表將兩個主表關(guān)聯(lián)起來。中間表的作用是將兩張表的主鍵作為其外鍵,通過外鍵建立這兩張表的映射關(guān)系。在單向的多對多關(guān)聯(lián)中,需要在主控端的類定義中增加一個Set集合屬性,使得被關(guān)聯(lián)一方的類的實例以集合的形式存在。

        示例:

        實體類:

        User.java

        public class User {
         private int userid;
         private String name;
         private String password;
         private Set address = new HashSet();
        
         public int getUserid() {
         return userid;
         }
         public void setUserid(int userid) {
         this.userid = userid;
         }
         public String getName() {
         return name;
         }
         public void setName(String name) {
         this.name = name;
         }
         public String getPassword() {
         return password;
         }
         public void setPassword(String password) {
         this.password = password;
         }
         public Set getAddress() {
         return address;
         }
         public void setAddress(Set address) {
         this.address = address;
         } 
        }

        Address.java

        public class Address {
         private int addressid;
         private String addressinfo;
        
         public int getAddressid() {
         return addressid;
         }
         public void setAddressid(int addressid) {
         this.addressid = addressid;
         }
         public String getAddressinfo() {
         return addressinfo;
         }
         public void setAddressinfo(String addressinfo) {
         this.addressinfo = addressinfo;
         } 
        }

        表結(jié)構(gòu):

        user表:

        這里寫圖片描述

        user_address表:

        這里寫圖片描述

        address表:

        這里寫圖片描述

        配置文件:

        User.hbm.xml

        
         
         
         
         
        
         
         
         
         
        
         
         
         
          
        
         
        

        Address.hbm.xml

        
         
         
         
         
        
         
         
        
        
         
        

        測試代碼Test.java

        public class Test {
         public static void main(String[] args){
         Session session = HibernateUtil.getSession();
         Transaction tx = session.beginTransaction();
        
         User u = new User();
         u.setName("sbw");
         u.setPassword("123"); 
         User u1 = new User();
         u1.setName("gaoya");
         u1.setPassword("456");
        
         Address a = new Address();
         a.setAddressinfo("heu");
         Address a1 = new Address();
         a1.setAddressinfo("hrb");
        
         u.getAddress().add(a);
         u.getAddress().add(a1);
         u1.getAddress().add(a);
         u1.getAddress().add(a1);
        
         session.save(a);
         session.save(a1);
         session.save(u);
         session.save(u1);
         tx.commit();
        
         HibernateUtil.closeSession();
        
         }
        }

        測試結(jié)果:

        這里寫圖片描述

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Hibernate關(guān)聯(lián)關(guān)系映射(單向篇)

        Hibernate關(guān)聯(lián)關(guān)系映射(單向篇):Hibernate關(guān)聯(lián)關(guān)系可分為單向關(guān)聯(lián)和雙向關(guān)聯(lián)兩大類。單向關(guān)聯(lián)可以分為一對一、一對多、多對一和多對多4種關(guān)聯(lián)方式,而多向關(guān)聯(lián)可以分為一對一、一對多和多對多3種關(guān)聯(lián)方式。 Hibernate連接管理類HibernateUtil.java public class Hiberna
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲免费黄色网址| 亚洲白色白色永久观看| 久久久亚洲精华液精华液精华液| 中文字幕亚洲免费无线观看日本| 亚洲精品私拍国产福利在线| 久久精品成人免费网站| 久久精品国产亚洲| 成人免费无码大片A毛片抽搐| 久久精品国产亚洲AV无码娇色| 91精品视频在线免费观看| 久久亚洲AV成人无码国产| 1000部拍拍拍18勿入免费凤凰福利 | 午夜高清免费在线观看| 亚洲性无码一区二区三区| 日韩在线天堂免费观看| 无遮挡a级毛片免费看| 亚洲无码高清在线观看| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | MM1313亚洲精品无码久久| 无码欧精品亚洲日韩一区夜夜嗨| 一级特黄a免费大片| 国精无码欧精品亚洲一区| 99热这里只有精品6免费| 亚洲综合免费视频| 毛片视频免费观看| 激情婷婷成人亚洲综合| 久久亚洲色一区二区三区| 永久在线免费观看| 亚洲一区二区三区成人网站| 内射无码专区久久亚洲| 免费无码又爽又刺激网站直播| 亚洲电影在线播放| 国产99视频免费精品是看6| 一级一级毛片免费播放| 久久91亚洲精品中文字幕| 成人免费视频小说| 中文字幕免费在线看电影大全| 亚洲欧洲高清有无| 亚洲第一永久AV网站久久精品男人的天堂AV| 亚洲视频在线免费| 亚洲最大成人网色香蕉|