`
ttitfly
  • 浏览: 622296 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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. <!---->
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!---->  
  5. <hibernate-mapping>  
  6.     <class name="yahaitt.bobo.domain.User" table="user">  
  7.         <id name="id" type="java.lang.Integer">  
  8.             <column name="id" />  
  9.             <generator class="native" />  
  10.         id>  
  11.         <property name="username" type="java.lang.String">  
  12.             <column name="username" not-null="true" />  
  13.         property>  
  14.         <one-to-one name="card" class="yahaitt.bobo.domain.Card" cascade="all">one-to-one>  
  15.     class>  
  16. hibernate-mapping>  

 

Card.hbm.xml:

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

 

item.hbm.xml

xml 代码
  1. <!---->xml version="1.0" encoding="utf-8"?>  
  2. <!---->
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!---->  
  5. <hibernate-mapping>  
  6.     <class name="ttitfly.domain.Item" table="item" >  
  7.         <id name="id" type="java.lang.Integer">  
  8.             <column name="id" />  
  9.             <generator class="native" />  
  10.         id>  
  11.         <many-to-one name="user" class="ttitfly.domain.User">  
  12.             <!---->  
  13.             <column name="userId" not-null="true">column>  
  14.         many-to-one>  
  15.     class>  
  16. 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. <!---->
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!---->  
  5. <hibernate-mapping>  
  6.     <class name="com.test.domain.Student" table="student" catalog="hibernate">  
  7.         <id name="id" type="java.lang.Integer">  
  8.             <column name="id" />  
  9.             <generator class="native" />  
  10.         id>  
  11.         <property name="studentname" type="java.lang.String">  
  12.             <column name="studentname" not-null="true" />  
  13.         property>  
  14.         <!---->  
  15.         <set name="teachers" table="teacher_student" inverse="false" cascade="all">  
  16.             <!---->  
  17.             <key column="student_id">key>  
  18.             <many-to-many class="com.test.domain.Teacher" column="teacher_id">many-to-many>  
  19.         set>  
  20.     class>  
  21. 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 (?, ?)  
分享到:
评论

相关推荐

    Hibernate关系映射

    **标题:“Hibernate关系映射”** 在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者将数据库操作转化为面向对象的方式,极大地简化了数据持久化的复杂性。"多对一"关系映射是Hibernate...

    hibernate关系映射多对多关系

    综上所述,这个压缩包提供了关于Hibernate关系映射的全面教程,包括多对多、一对一和一对多的关系配置,以及如何在Spring+Hibernate+Struts环境中应用这些关系。对于想要深入理解Hibernate并提升开发效率的Java...

    Hibernate对象关系映射

    Hibernate对象关系映射一对多 很基础等文档

    hibernate关系映射.doc

    hibernate关系映射,1V1,1vN,nVn,单相双相

    hibernate关系映射1to1及Nto1

    hibernate关系映射系列1,单向1对1映射,意向Nto1 程序说明:生成mysql数据库,建立DB Browser连接后,用户可在程序中自动生成mysql表,非常简单,适合初学者了解hibernate映射机制,有问题可联系flyallen5@hotmail.com

    Hibernate关系映射XML生成工具

    Hibernate是一款强大的对象关系映射(ORM)框架,它允许开发者用Java对象来操作数据库,而无需直接编写SQL语句。关系映射XML生成工具,如"Middlegen-Hibernate-r5",则是为了简化这一过程而设计的。这些工具能够自动...

    hibernate的关系映射

    **二、Hibernate关系映射的类型** 1. **一对一(OneToOne)**: 表示一个实体对应另一个实体的唯一实例。这可以通过在两个类中都定义`@OneToOne`注解来实现,并通过`mappedBy`属性指定被引用的一方。 2. **一对多...

    Hibernate_关联关系映射配置详解

    Hibernate_关联关系映射配置详解,希望能帮助广大java爱好者

    Hibernate的关联关系映射图解

    Hibernate4中映射关系图解。

    hibernate关系映射配置.rar

    &lt;hibernate-mapping&gt; &lt;class name="com.bjsxt.hibernate.User" table="t_user"&gt; &lt;!-- --&gt; &lt;/hibernate-mapping&gt; &lt;hibernate-mapping&gt; &lt;class name="com.bjsxt.hibernate.Group" ...

    hibernate关联映射详解

    hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的关联关系,...

    hibernate关系映射.chm

    现在我也正在学hibernate,于是我认为这东西对你也有用吧

Global site tag (gtag.js) - Google Analytics