Hibernate之關聯關系映射(一對一主鍵映射和一對一外鍵映射)


1:Hibernate的關聯關系映射的一對一外鍵映射:

  1.1:第一首先引包,省略

  1.2:第二創建實體類:

    這里使用用戶信息和身份證信息的關系,用戶的主鍵編號既可以做身份證信息的主鍵又可以做身份證信息的外鍵,這里先做外鍵。

    創建User.java:

      用戶和身份證一對一的關聯關系映射
          private IdCart idCart;

    IdCart.java:

      身份證和用戶,一對一的關系
          private User user;

 1 package com.bie.bean;
 2 /** 
 3 * @author BieHongLi 
 4 * @version 創建時間:2017年3月22日 下午2:06:35 
 5 * 用戶的實體類
 6 */
 7 public class User {
 8 
 9     private int id;
10     private String name;
11     
12     //用戶和身份證一對一的關聯關系映射
13     private IdCart idCart;
14 
15     public int getId() {
16         return id;
17     }
18 
19     public void setId(int id) {
20         this.id = id;
21     }
22 
23     public String getName() {
24         return name;
25     }
26 
27     public void setName(String name) {
28         this.name = name;
29     }
30 
31     public IdCart getIdCart() {
32         return idCart;
33     }
34 
35     public void setIdCart(IdCart idCart) {
36         this.idCart = idCart;
37     }
38 
39     @Override
40     public String toString() {
41         return "User [id=" + id + ", name=" + name + ", idCart=" + idCart + "]";
42     }
43     
44 }
View Code
 1 package com.bie.bean;
 2 /** 
 3 * @author BieHongLi 
 4 * @version 創建時間:2017年3月22日 下午2:07:09 
 5 * 用戶身份證信息的實體類
 6 */
 7 public class IdCart {
 8 
 9     private String cartNum;//身份證號,主鍵,對象唯一標識
10     private String place;
11     
12     //身份證和用戶,一對一的關系
13     private User user;
14 
15     public String getCartNum() {
16         return cartNum;
17     }
18 
19     public void setCartNum(String cartNum) {
20         this.cartNum = cartNum;
21     }
22 
23     public String getPlace() {
24         return place;
25     }
26 
27     public void setPlace(String place) {
28         this.place = place;
29     }
30 
31     public User getUser() {
32         return user;
33     }
34 
35     public void setUser(User user) {
36         this.user = user;
37     }
38 
39     @Override
40     public String toString() {
41         return "IdCart [cartNum=" + cartNum + ", place=" + place + ", user=" + user + "]";
42     }
43 
44 }
View Code

  1.3:創建好實體類,就可以開始配置映射關系了:

    User.hbm.xml:

      <one-to-one name="idCart" class="IdCart"></one-to-one>

    IdCart.hbm.xml:

      <!--
              (1)一對一映射,有外鍵方
              (2)特殊的多對一映射,多了一個外鍵,設置主鍵唯一性
              (3)cascade="save-update"級聯保存
              (4)用戶表的主鍵做身份證信息的外鍵
              (5)unique="true"給外鍵字段添加唯一約束
             -->
          <many-to-one cascade="save-update" unique="true" name="user" column="userId" class="User">

    </many-to-one>

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping package="com.bie.bean">
 6     <class name="User" table="user2">
 7         <!-- 主鍵映射 -->
 8         <id name="id" column="id">
 9             <generator class="native"></generator>
10         </id>    
11         
12         <!-- 非主鍵映射 -->
13         <property name="name" column="name" type="string" length="20"></property>
14         
15         
16         <!-- 其他字段映射 -->
17         <!-- 
18             一對一映射,沒有主鍵
19          -->
20         <one-to-one name="idCart" class="IdCart"></one-to-one>
21         
22     </class>
23 
24 </hibernate-mapping>
25     
26     
 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping package="com.bie.bean">
 6     <class name="IdCart" table="idCart">
 7         <!-- 主鍵映射 -->
 8         <id name="cartNum" column="cartNum">
 9             <!-- <generator class="native"></generator> -->
10             <!-- 身份證信息自己手動設置更加人性化哦 -->
11             <generator class="assigned"></generator>
12         </id>
13         
14         <!-- 非主鍵映射 -->
15         <property name="place" column="place" type="string" length="20"></property>
16         
17         <!-- 其他字段映射 -->
18         <!-- 
19             (1)一對一映射,有外鍵方
20             (2)特殊的多對一映射,多了一個外鍵,設置主鍵唯一性
21             (3)cascade="save-update"級聯保存
22             (4)用戶表的主鍵做身份證信息的外鍵
23             (5)unique="true"給外鍵字段添加唯一約束
24          -->
25         <many-to-one cascade="save-update" unique="true" name="user" column="userId" class="User"></many-to-one>
26         
27     </class>
28 </hibernate-mapping>

  1.4:最后就可以配置Hibernate.cfg.xml配置了。

 1 <!DOCTYPE hibernate-configuration PUBLIC
 2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 4 
 5 <hibernate-configuration>
 6     <!-- 一個session-factory節點代表一個數據庫 -->
 7     <session-factory>
 8         <!-- 第一部分:數據庫連接配置 -->
 9         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
10         <property name="hibernate.connection.url">jdbc:mysql:///test</property>
11         <property name="hibernate.connection.username">root</property>
12         <property name="hibernate.connection.password">123456</property>
13         
14         <!-- 第二部分:其他相關配置 -->
15         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
16         <property name="hibernate.show_sql">true</property>
17         <!-- <property name="hibernate.format_sql">true</property> -->
18         <property name="hibernate.hbm2ddl.auto">create</property>
19         <!-- 
20              1:每次在創建sessionFactory時執行創建表,當調用sessionFactory的close方法的時候,刪除表
21              #hibernate.hbm2ddl.auto create-drop
22             
23             2:每次都重新建表,如果已經存在就先刪除再創建
24             #hibernate.hbm2ddl.auto create
25             
26             3:如果表不存在就創建,表存在就不創建
27             #hibernate.hbm2ddl.auto update
28             
29             4:生成環境時候執行驗證,當映射文件的內容與數據庫表結構不一樣的時候就報錯
30             #hibernate.hbm2ddl.auto validate
31           --> 
32         
33         <!-- 第三部分,加載映射文件 -->
34         <!-- <mapping resource="com/bie/po/User.hbm.xml"/> -->
35         
36         
37         <!-- 第三部分,加載映射文件,一對一主鍵和外鍵的映射的練習 -->
38         <mapping resource="com/bie/bean/User.hbm.xml"/>
39         <mapping resource="com/bie/bean/IdCart.hbm.xml"/>
40         
41     </session-factory>
42 </hibernate-configuration>    
43     
44     
45     

  1.5:最后測試,既可以完成對一對一外鍵映射的使用和學習:

 1 package com.bie.test;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.cfg.Configuration;
 6 import org.junit.Test;
 7 
 8 import com.bie.bean.IdCart;
 9 import com.bie.bean.User;
10 
11 /** 
12 * @author BieHongLi 
13 * @version 創建時間:2017年3月22日 下午2:51:34 
14 * 
15 */
16 public class One2One {
17 
18     private static SessionFactory sf = null;
19     static{
20         sf = new Configuration().configure().buildSessionFactory();
21     }
22     
23     @Test
24     public void test(){
25         Session session = sf.openSession();
26         session.beginTransaction();
27         
28         //用戶信息
29         User user = new User();
30         user.setName("張三三");
31         
32         //身份證信息
33         IdCart idCart = new IdCart();
34         idCart.setCartNum("41072519930416****");
35         idCart.setPlace("深圳市");
36         
37         //設置用戶信息和身份證信息的關系
38         idCart.setUser(user);
39         
40         //如果設置級聯操作,只用保存身份證信息即可
41         session.save(idCart);
42         
43         session.getTransaction().commit();
44         session.close();
45     }
46 }

2:Hibernate的關聯關系映射的一對一主鍵映射:

  2.1:第一步引包省略

  2.2:第二步,創建實體類,和上面的實體類的區別就是在身份證實體類表里面加了一個成員變量

      private int id;//用戶表的主鍵做身份證表的主鍵

  2.3:第三步配置映射文件,這里修改的主要是身份證的映射文件,修改如下所示:

    User.hbm.xml:主要是包的改動

      <hibernate-mapping package="com.bie.domain"></hibernate-mapping>

    IdCart.hbm.xml:這個改動略大哦

      <!-- 主鍵映射 -->
           <id name="id" column="id">
             <generator class="foreign">
                  <param name="property">user</param>
                </generator>
            </id>

      <one-to-one name="user" constrained="true" class="User"></one-to-one>

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping package="com.bie.domain">
 6     <class name="IdCart" table="idCart">
 7         <!-- 主鍵映射 -->
 8         <id name="id" column="id">
 9         <!-- 
10             id節點指定的是主鍵映射,即id是主鍵
11             主鍵生成方式:foreign即把別的表的主鍵作為當前表的主鍵,
12                 property(關鍵字,不能修改)指定引用的對象==》對象的全名com.bie.domain.User==13                 對象映射文件com.bie.domain.xml==》表table(id)
14          -->
15             <generator class="foreign">
16                 <param name="property">user</param>
17             </generator>
18         </id>
19         
20         <property name="cartNum" column="cartNum" type="string" length="20"></property>
21         <!-- 非主鍵映射 -->
22         <property name="place" column="place" type="string" length="20"></property>
23         
24         <!-- 其他字段映射 -->
25         <!-- 
26             (1)一對一映射,有外鍵方
27             (2)用戶表的主鍵做身份證表的主鍵
28             (3)constrained="true"設置外鍵
29          -->
30         <one-to-one name="user" constrained="true" class="User"></one-to-one>
31         
32     </class>
33 </hibernate-mapping>

Hibernate的關聯關系的映射搞清楚如何映射會使用即可,這里LZ記錄方便為了自行腦補~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM