hibernate3学习笔记(十九)|关系映射:一对一

 A.唯一外键关联

DDL:

  1. CREATE TABLE user (
  2.     id INT(11) NOT NULL auto_increment PRIMARY KEY,
  3.     name VARCHAR(100) NOT NULL default '',
  4.     room_id INT(11)
  5. );
  6. CREATE TABLE room (
  7.     id INT(11) NOT NULL auto_increment PRIMARY KEY,
  8.     address VARCHAR(100) NOT NULL default ''
  9. );

User.java

  1. package com.hb3.pack_02.model;
  2. public class User {
  3.     private Integer id;
  4.     private String name;
  5.     private Room room;
  6.     
  7.     public User() {
  8.     }
  9.     public Integer getId() {
  10.         return id;
  11.     }
  12.     public void setId(Integer id) {
  13.         this.id = id;
  14.     }
  15.     public String getName() {
  16.         return name;
  17.     }
  18.     public void setName(String name) {
  19.         this.name = name;
  20.     }
  21.     public Room getRoom() {
  22.         return room;
  23.     }
  24.     public void setRoom(Room room) {
  25.         this.room = room;
  26.     }
  27. }

Room.java

  1. package com.hb3.pack_02.model;
  2. public class Room {
  3.     private Integer id; 
  4.     private String address;
  5.     private User user;
  6.     
  7.     public Room() {
  8.     }
  9.     
  10.     public Integer getId() { 
  11.         return id; 
  12.     } 
  13.     public void setId(Integer id) { 
  14.         this.id = id; 
  15.     }
  16.     public String getAddress() { 
  17.         return address; 
  18.     }
  19.     public void setAddress(String address) { 
  20.         this.address = address; 
  21.     }
  22.     public User getUser() {
  23.         return user;
  24.     }
  25.     public void setUser(User user) {
  26.         this.user = user;
  27.     }
  28. }

User.hbm.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping> 
  6.     <class name="com.hb3.pack_02.model.User" table="user"> 
  7.         <id name="id" column="id" type="java.lang.Integer"> 
  8.             <generator class="native"/> 
  9.         </id> 
  10.         <property name="name" column="name" type="java.lang.String"/> 
  11.         
  12.         <many-to-one name="room" 
  13.                      column="room_id" 
  14.                      class="com.hb3.pack_02.model.Room"
  15.                      cascade="all"
  16.                      outer-join="true"
  17.                      unique="true"/>    
  18.     </class> 
  19. </hibernate-mapping>

Room.hbm.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping> 
  6.     <class name="com.hb3.pack_02.model.Room" table="room"> 
  7.         <id name="id" column="id"> 
  8.             <generator class="native"/> 
  9.         </id> 
  10.         <property name="address" 
  11.                   column="address" 
  12.                   type="java.lang.String"/> 
  13.                   
  14.         <one-to-one name="user"
  15.                     class="com.hb3.pack_02.model.User"
  16.                     property-ref="room"/>
  17.     </class> 
  18. </hibernate-mapping>

测试代码:

  1. package com.hb3.pack_02;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.Transaction;
  5. import org.hibernate.cfg.Configuration;
  6. import com.hb3.pack_02.model.Room;
  7. import com.hb3.pack_02.model.User;
  8. public class BusinessService {
  9.     public static void main(String[] args) {
  10.         
  11.         Configuration config = new Configuration().configure();
  12.         SessionFactory sessionFactory = config.buildSessionFactory();      
  13.         Session session = sessionFactory.openSession();
  14.         User user1 = new User();
  15.         user1.setName("shenbin"); 
  16.         Room room1 = new Room(); 
  17.         room1.setAddress("NTU-M8-419");
  18.         user1.setRoom(room1);
  19.    
  20.         User user2 = new User(); 
  21.         user2.setName("chanyan"); 
  22.         Room room2 = new Room(); 
  23.         room2.setAddress("NTU-M8-418");
  24.         user2.setRoom(room2);
  25.       
  26.         Transaction tx = session.beginTransaction();
  27.         session.save(user1);
  28.         session.save(user2);        
  29.         tx.commit();
  30.         
  31.         Room room = (Room) session.load(Room.classnew Integer(1));
  32.         System.out.println(room.getUser().getName());
  33.         
  34.         session.close();
  35.         sessionFactory.close();
  36.     }
  37. }

 A.主键关联

DDL:

  1. CREATE TABLE user (
  2.     id INT(11) NOT NULL auto_increment PRIMARY KEY,
  3.     name VARCHAR(100) NOT NULL default ''
  4. );
  5. CREATE TABLE room (
  6.     id INT(11) NOT NULL auto_increment PRIMARY KEY,
  7.     address VARCHAR(100) NOT NULL default ''
  8. );

Room和User类同上。

Room.hbm.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping> 
  6.     <class name="com.hb3.pack_18.model.Room" table="room">
  7.     
  8.         <id name="id" column="id"> 
  9.             <generator class="foreign"> 
  10.                 <param name="property">user</param>
  11.             </generator>
  12.         </id> 
  13.         <property name="address" 
  14.                   column="address" 
  15.                   type="java.lang.String"/> 
  16.                   
  17.         <one-to-one name="user"
  18.                     class="com.hb3.pack_18.model.User"
  19.                     constrained="true"/>
  20.     </class> 
  21. </hibernate-mapping>

User.hbm.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping> 
  6.     <class name="com.hb3.pack_18.model.User" table="user">
  7.      
  8.         <id name="id" column="id" type="java.lang.Integer"> 
  9.             <generator class="native"/> 
  10.         </id> 
  11.         <property name="name" column="name" type="java.lang.String"/> 
  12.         
  13.         <one-to-one name="room" 
  14.                     class="com.hb3.pack_18.model.Room"
  15.                     cascade="all"/>
  16.     </class> 
  17. </hibernate-mapping>

测试代码:

  1. package com.hb3.pack_18;
  2. import java.io.IOException;
  3. import java.sql.SQLException;
  4. import org.hibernate.Session;
  5. import org.hibernate.SessionFactory;
  6. import org.hibernate.Transaction;
  7. import org.hibernate.cfg.Configuration;
  8. import com.hb3.pack_18.model.Room;
  9. import com.hb3.pack_18.model.User;
  10. public class BusinessService {
  11.     public static void main(String[] args) throws IOException, SQLException {
  12.         
  13.         Configuration config = new Configuration().configure();
  14.         SessionFactory sessionFactory = config.buildSessionFactory();      
  15.         Session session = sessionFactory.openSession();
  16.         
  17.         User user1 = new User();
  18.         user1.setName("chanyan"); 
  19.         Room room1 = new Room(); 
  20.         room1.setAddress("NTU-M8-419");
  21.         user1.setRoom(room1);
  22.         room1.setUser(user1);
  23.                 
  24.         User user2 = new User(); 
  25.         user2.setName("shenbin"); 
  26.         Room room2 = new Room(); 
  27.         room2.setAddress("NTU-M8-418");
  28.         user2.setRoom(room2);
  29.         room2.setUser(user2);
  30.                 
  31.         Transaction tx = session.beginTransaction();
  32.         session.save(user1);
  33.         session.save(user2);
  34.         tx.commit();
  35.         session.close();
  36.         sessionFactory.close();
  37.     }
  38. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值