<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
        主站蜘蛛池模板: aaa毛片视频免费观看| 亚洲 日韩 色 图网站| h视频免费高清在线观看| 国产精品自在自线免费观看| 亚洲日韩中文字幕一区| 四虎免费影院ww4164h| 亚洲一级视频在线观看| 手机在线免费视频| 亚洲av永久无码精品秋霞电影秋| 我想看一级毛片免费的| 亚洲国产精品成人综合色在线| 日本无吗免费一二区| 国产成人不卡亚洲精品91| 亚洲毛片不卡av在线播放一区| 在线免费视频你懂的| 亚洲日本在线看片| 无码国产精品一区二区免费I6| 亚洲日韩一区二区一无码| 亚洲av无码乱码在线观看野外| 伊人久久国产免费观看视频| 亚洲av无码一区二区乱子伦as| 亚洲w码欧洲s码免费| 亚洲乱码无人区卡1卡2卡3| 亚洲成年看片在线观看| a毛看片免费观看视频| 亚洲欧洲日韩国产| 最近中文字幕免费mv视频7 | 亚洲欧洲国产精品久久| 国产成人A在线观看视频免费| 亚洲国产欧美国产综合一区| 亚洲黄黄黄网站在线观看| 日本一区二区免费看| 午夜在线a亚洲v天堂网2019| 国产成人亚洲精品影院| 日韩免费的视频在线观看香蕉| 亚洲日本人成中文字幕| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | ww在线观视频免费观看w| 亚洲午夜久久久精品影院| 日韩精品无码区免费专区| 91av免费在线视频|