hibernate关系映射

java 代码
  1. package com.test;   
  2.   
  3. import java.util.HashSet;   
  4. import java.util.Set;   
  5.   
  6. import com.test.domain.Student;   
  7. import com.test.domain.Teacher;   
  8.   
  9. public class Test {   
  10.     public static void main(String[] args){   
  11.            
  12.         Student student1 = new Student();   
  13.         Student student2 = new Student();   
  14.            
  15.         Teacher teacher1 = new Teacher();   
  16.         Teacher teacher2 = new Teacher();   
  17.            
  18.            
  19.         student1.setStudentname("student1");   
  20.         student2.setStudentname("student2");   
  21.            
  22.         teacher1.setTeachername("teachername1");   
  23.         teacher2.setTeachername("teachername2");   
  24.            
  25.         Set set1 = new HashSet();   
  26.         set1.add(teacher1);   
  27.         set1.add(teacher2);   
  28.            
  29.            
  30.         student1.setTeachers(set1);   
  31.         student2.setTeachers(set1);   
  32.            
  33.         OperatorDb od = new OperatorDb();   
  34.         od.saveUser(student1);   
  35.         od.saveUser(student2);   
  36.            
  37.     }   
  38.   
  39. }   
  40.   
  41. 输出结果为:   
  42. Hibernate: insert into hibernate.student (studentname) values (?)   
  43. Hibernate: insert into hibernate.teacher (teachername) values (?)   
  44. Hibernate: insert into hibernate.teacher (teachername) values (?)   
  45. Hibernate: insert into teacher_student (student_id, teacher_id) values (?, ?)   
  46. Hibernate: insert into teacher_student (student_id, teacher_id) values (?, ?)   
  47. Hibernate: insert into hibernate.student (studentname) values (?)   
  48. Hibernate: insert into teacher_student (student_id, teacher_id) values (?, ?)   
  49. Hibernate: insert into teacher_student (student_id, teacher_id) values (?, ?)  

建表语句

sql 代码
  1. --   
  2. -- Host: localhost    Database: hibernate   
  3. -- ------------------------------------------------------   
  4. -- Server version   5.0.24a-community-nt   
  5.   
  6. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;   
  7. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;   
  8. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;   
  9. /*!40101 SET NAMES utf8 */;   
  10. /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;   
  11. /*!40103 SET TIME_ZONE='+00:00' */;   
  12. /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;   
  13. /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;   
  14. /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;   
  15. /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;   
  16.   
  17. --   
  18. -- Current Database: `hibernate`   
  19. --   
  20.   
  21. CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hibernate` /*!40100 DEFAULT CHARACTER SET utf8 */;   
  22.   
  23. USE `hibernate`;   
  24.   
  25. --   
  26. -- Table structure for table `detail`   
  27. --   
  28.   
  29. DROP TABLE IF EXISTS `user`;   
  30. CREATE TABLE `user` (   
  31.   `id` int(11) NOT NULL auto_increment,   
  32.   `username` varchar(255)  NOT NULL,   
  33.   PRIMARY KEY  (`id`)   
  34. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;   
  35.   
  36. DROP TABLE IF EXISTS `card`;   
  37. CREATE TABLE `card` (   
  38.   `userId` int(11) NOT NULL default '0',   
  39.   `cardNum` varchar(255)  NOT NULL,   
  40.   PRIMARY KEY  (`userId`)   
  41. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;   
  42.   
  43. DROP TABLE IF EXISTS `item`;   
  44. CREATE TABLE `item` (   
  45.   `id` int(11) NOT NULL auto_increment,   
  46.   `userId` int(11) NOT NULL default '0',   
  47.   PRIMARY KEY  (`id`),   
  48.   foreign key(userId) references outTable(id) on delete cascade on update cascade  
  49. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;   

1. one-to-one(用户和卡片)

user.hbm.xml

xml 代码
  1. xml version="1.0" encoding="utf-8"?>  
  2. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  3.   
  4. <hibernate-mapping>  
  5.     <class name="yahaitt.bobo.domain.User" table="user">  
  6.         <id name="id" type="java.lang.Integer">  
  7.             <column name="id" />  
  8.             <generator class="native" />  
  9.         id>  
  10.         <property name="username" type="java.lang.String">  
  11.             <column name="username" not-null="true" />  
  12.         property>  
  13.         <one-to-one name="card" class="yahaitt.bobo.domain.Card" cascade="all">one-to-one>  
  14.     class>  
  15. hibernate-mapping>  

 

Card.hbm.xml:

xml 代码
  1. xml version="1.0" encoding="utf-8"?>  
  2. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  3.   
  4. <hibernate-mapping>  
  5.     <class name="yahaitt.bobo.domain.Card" table="card">  
  6.         <id name="userId" type="java.lang.Integer">  
  7.             <column name="userId" />  
  8.                 <generator class="foreign" >  
  9.                     <param name="property">userparam>  
  10.                 generator>  
  11.         id>  
  12.         <property name="cardNum" type="java.lang.String">  
  13.             <column name="cardNum" not-null="true" />  
  14.         property>  
  15.         <one-to-one name="user" class="yahaitt.bobo.domain.User" >  
  16.                
  17.         one-to-one>  
  18.     class>  
  19. hibernate-mapping>  

 

 

2. many-to-one (用户与Item)

注:两边都定义外键,而且不能像one-to-one里那样定义外键

如:这样定义是错误的:

xml 代码
  1. <generator class="foreign" >  
  2.               <param name="property">userparam>  
  3.  generator>  

 

user.hbm.xml:

xml 代码
  1. xml version="1.0" encoding="utf-8"?>  
  2. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  3.   
  4. <hibernate-mapping>  
  5.     <class name="ttitfly.domain.User" table="user" >  
  6.         <id name="id" type="java.lang.Integer">  
  7.             <column name="id" />  
  8.             <generator class="native" />  
  9.         id>  
  10.         <property name="username" type="java.lang.String">  
  11.             <column name="username" not-null="true" />  
  12.         property>  
  13.         <set name="items" inverse="true" cascade="all" >  
  14.             <key>  
  15.                 <column name="userId" not-null="true" >  
  16.                 column>  
  17.             key>      
  18.             <one-to-many class="ttitfly.domain.Item"/>         
  19.         set>  
  20.     class>  
  21. hibernate-mapping>  

 

item.hbm.xml

xml 代码
  1. xml version="1.0" encoding="utf-8"?>  
  2. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  3.   
  4. <hibernate-mapping>  
  5.     <class name="ttitfly.domain.Item" table="item" >  
  6.         <id name="id" type="java.lang.Integer">  
  7.             <column name="id" />  
  8.             <generator class="native" />  
  9.         id>  
  10.         <many-to-one name="user" class="ttitfly.domain.User">  
  11.               
  12.             <column name="userId" not-null="true">column>  
  13.         many-to-one>  
  14.     class>  
  15. hibernate-mapping>  

 

测试类:Test.java

java 代码
  1. public class Test {   
  2.        
  3.     public static void main(String[] args){   
  4.            
  5.            
  6.         User user = new User();   
  7.         user.setUsername("testonetomany");   
  8.            
  9.         Item item1 = new Item();   
  10.         Item item2 = new Item();   
  11.         Set set = new HashSet();   
  12.         set.add(item1);   
  13.         set.add(item2);   
  14.            
  15.         user.setItems(set);   
  16.            
  17.         item2.setUser(user);   
  18.         item1.setUser(user);   
  19.            
  20.         OperateDb operator  = new OperateDb();   
  21.         operator.saveUser(user);   
  22.            
  23.            
  24.            
  25.     }   
  26.   
  27. }   
  28.   
  29. 输出结果为:   
  30. Hibernate: insert into user (username) values (?)   
  31. Hibernate: insert into item (userId) values (?)   
  32. Hibernate: insert into item (userId) values (?)  

当把user.hbm.xml里的

xml 代码
  1. <set name="items" inverse="true" cascade="all" >  
改为:
xml 代码
  1. <set name="items" inverse="false" cascade="all" >  

 

测试类输出的结果为:

java 代码
  1. Hibernate: insert into user (username) values (?)   
  2. Hibernate: insert into item (userId) values (?)   
  3. Hibernate: insert into item (userId) values (?)   
  4. Hibernate: update item set userId=? where id=?   
  5. Hibernate: update item set userId=? where id=?  

 

inverse的作用就可以很明显看出来了

 

3.many-to-many(学生和老师)

student.hbm.xml

xml 代码
  1. xml version="1.0" encoding="utf-8"?>  
  2. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  3.   
  4. <hibernate-mapping>  
  5.     <class name="com.test.domain.Student" table="student" catalog="hibernate">  
  6.         <id name="id" type="java.lang.Integer">  
  7.             <column name="id" />  
  8.             <generator class="native" />  
  9.         id>  
  10.         <property name="studentname" type="java.lang.String">  
  11.             <column name="studentname" not-null="true" />  
  12.         property>  
  13.           
  14.         <set name="teachers" table="teacher_student" inverse="false" cascade="all">  
  15.               
  16.             <key column="student_id">key>  
  17.             <many-to-many class="com.test.domain.Teacher" column="teacher_id">many-to-many>  
  18.         set>  
  19.     class>  
  20. hibernate-mapping>  

 

teacher.hbm.xml

java 代码
  1. "1.0" encoding="utf-8"?>   
  2. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   
  4.   
  5. <hibernate-mapping></hibernate-mapping>  
  6.     <class name="com.test.domain.Teacher" table="teacher" catalog="hibernate">   
  7.         "id" type="java.lang.Integer">   
  8.             "id" />   
  9.             class="native" />   
  10.            
  11.         "teachername" type="java.lang.String">   
  12.             "teachername" not-null="true" />   
  13.            
  14.         "students" table="teacher_student" inverse="true">   
  15.             "teacher_id">   
  16.             "student_id" class="com.test.domain.Student">   
  17.            
  18.     class>   
  19.   

 

测试类:

 

java 代码
  1. package com.test;   
  2.   
  3. import java.util.HashSet;   
  4. import java.util.Set;   
  5.   
  6. import com.test.domain.Student;   
  7. import com.test.domain.Teacher;   
  8.   
  9. public class Test {   
  10.     public static void main(String[] args){   
  11.            
  12.         Student student1 = new Student();   
  13.         Student student2 = new Student();   
  14.            
  15.         Teacher teacher1 = new Teacher();   
  16.         Teacher teacher2 = new Teacher();   
  17.            
  18.            
  19.         student1.setStudentname("student1");   
  20.         student2.setStudentname("student2");   
  21.            
  22.         teacher1.setTeachername("teachername1");   
  23.         teacher2.setTeachername("teachername2");   
  24.            
  25.         Set set1 = new HashSet();   
  26.         set1.add(teacher1);   
  27.         set1.add(teacher2);   
  28.            
  29.            
  30.         student1.setTeachers(set1);   
  31.         student2.setTeachers(set1);   
  32.            
  33.         OperatorDb od = new OperatorDb();   
  34.         od.saveUser(student1);   
  35.         od.saveUser(student2);   
  36.            
  37.     }   
  38.   
  39. }   
  40. 输出结果为:   
  41. Hibernate: insert into hibernate.student (studentname) values (?)   
  42. Hibernate: insert into hibernate.teacher (teachername) values (?)   
  43. Hibernate: insert into hibernate.teacher (teachername) values (?)   
  44. Hibernate: insert into teacher_student (student_id, teacher_id) values (?, ?)   
  45. Hibernate: insert into teacher_student (student_id, teacher_id) values (?, ?)   
  46. Hibernate: insert into hibernate.student (studentname) values (?)   
  47. Hibernate: insert into teacher_student (student_id, teacher_id) values (?, ?)   
  48. Hibernate: insert into teacher_student (student_id, teacher_id) values (?, ?)  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值