Hibernate 的七种映射关系
来源:互联网 发布:java编辑工具 编辑:程序博客网 时间:2024/06/07 23:10
说到关系,在这个世界无处不在,我们必须以某个关系的节点存在在这个世界网中。比如父子关系,师生关系,上下属关系甚至是危险关系。数据也是一样的,它的存在必为某其他节点做准备。
Hibernate有七种映射关联,方向分为单向或双向,主要根据需求分析多和一的关联,分别为:
1、单向1-12、单向N-13、单向1-N4、单向N-N5、双向1-N6、双向N-N7、双向1-1 在学习这七种映射关联之前,首先要了解基本映射的一些知识和必备条件。 一、必备实体类,以*.java命名。 如Student.java文件
1 public class Student { 2 private int id; 3 private String name; 4 public int getId() { 5 return id; 6 } 7 public void setId(int id) { 8 this.id = id; 9 }10 public String getName() {11 return name;12 }13 public void setName(String name) {14 this.name = name;15 }16 17 }
二、必备配置文件,以*.hbm.xml命名。 了解hibernate.cfg.xml配置文件: 1、文档开头引入dtd文件,用来约束xml的命名为其制定了一套标准(提供了一套标签,好吧我承认这种理解有点土)。
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
2、配置数据库以及映射类的地址映射信息。
1 <hibernate-configuration> 2 <session-factory> 3 <!-- 数据库配置 --> 4 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 5 <property name="hibernate.connection.url">jdbc:mysql://localhost:3307/hibernate_one2many</property> 6 <property name="hibernate.connection.username">root</property> 7 <property name="hibernate.connection.password">123456</property> 8 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 9 <property name="hibernate.show_sql">true</property>10 11 <!-- 映射类的地址映射信息 -->12 <mapping resource="com/juyahong/hibernate/Student.hbm.xml"/>13 <mapping resource="com/juyahong/hibernate/Classes.hbm.xml"/>14 </session-factory>15 </hibernate-configuration>
三、映射文件,以*.hbm.xml命名。 如:Student.hbm.xml 通常我们的实体类可以映射成表,采用<class>标签映射。比如:
1 <hibernate-mapping package="com.juyahong.hibernate">2 <class name="Student" table="t_student">3 <id name="id">4 <generator class="native"/>5 </id>6 <property name="name" length="30"/>7 </class>8 </hibernate-mapping>
如上面代码可知,实体类中的普通属性即不包括集合、自定义类和数组的属性,映射成了表字段,采用<property>标签映射。需要注意的是实体类的命名或属性不能和数据库的关键字重复,否则会出错,之前做高校平台-基础系统的时候就出现了这个问题。可以通过table="**" 或 column="**"来重命名。有了以上的必备条件后,之后的博客就开始以学生管理系统为例分析七种的映射关联。
七、Hibernate双向一对多关联映射:让多的一端来维护关系。
主要是解决一对多单向关联的缺陷,而不是需求驱动的。
1、在Student.java实体类里添加Classes引用。private Classes classes;
2、Student.hbm.xml里添加many-to-one标签:<many-to-one name="classes" column="classesid"/>.Classes.hbm.xml在例子(六)里的那个的基础上加入反转属性inverse(以后将维护关系的工作交给了student)。
<set name="students" inverse="true"> <key column="classesid"></key> <one-to-many class="com.juyahong.hibernate.Student"/></set>
注1:先保存classes,再保存student。
注2:一对多双向关联的映射方式:
- 在一的一端的集合上采用key标签,可以使得多的一端加入一个外键。
- 在多的一端采用many-to-one标签
注3:key标签和many-to-one标签加入的字段保持一致,否则会产生数据混乱。
注4:一对多关联映射通常在多的一端维护关系,让一的一端失效:
------inverse反转属性的使用:可以用在一对多和多对多双向关联上,inverse属性默认为false,即表示在本端可以维护关系,如果inverse为true,即表示本端不维护关系,要交给另一端来维护关系,本端失效。它是控制方向上的反转,只影响存储。
------cascade是操作上的连锁反应(暂时了解)。
八、Hibernate单向多对多关联映射:
比如学生和课程之间的关系,用户和角色之间的关系都是多对多关系。
1、User.java和Role.java实体类里都有两个普通属性id和name,在User.java里添加属性,private Set roles;
2、修改User.hbm.xml映射文件:映射集合:
<set name="roles" table="t_user_role"> <key column="user_id"/> <many-to-many class="com.juyahong.hibernate.Role" column="role_id"/> </key></set>
九、Hibernate双向多对多关联映射:
1、Role.java里加入新集合private Set users;
2、在例子八的基础上,修改Role.hbm.xml文件
<set name="users" table="t_user_role"> <key column="role_id"/> <many-to-many class="com.juyahong.hibernate.User" column="user_id"/> </key></set>
以上介绍了Hibernate中的七种映射关系(还包括映射主键和外键两种),在学习这一块的时候主要是能看懂UML图,在这些前提下,修改两个文件,一个模型类,还有一个映射文件。本文主要简单的提到了需要注意修改的地方和一些注意的知识点,和一些理解的东西,我觉得懂得这些足以提纲挈领,足以入门,就没有必要全部把代码贴上来了。
通过学习Hibernate,让我又提起了知识网上的旧知识点,打上了结点。又学习了通过对象模型来实现对数据库的操作,进一步的了解了面向对象的精神所在,跟当初学习设计模式一样,一切的一切都是在对象的基础上,实现简单方便快捷又可易维护的方法,受益匪浅,期待进一步的了解和探索。
转自:http://www.cnblogs.com/jyh317/p/3694844.html
- Hibernate 的七种映射关系
- Hibernate的七种映射关系之基本映射
- Hibernate的七种映射关系之基本映射
- Hibernate的七种映射关系之七种关联映射(一)
- Hibernate的七种映射关系之七种关联映射(二)
- Hibernate的七种映射关系之七种关联映射
- Hibernate的七种映射关系之七种关联映射
- Hibernate的七种映射关系之七种关联映射(二)
- hibernate七种对应关系映射
- Hibernate映射解析——七种映射关系
- Hibernate映射解析——七种映射关系
- Hibernate映射解析——七种映射关系
- Hibernate映射解析——七种映射关系
- Hibernate映射解析——七种映射关系
- Hibernate映射解析——七种映射关系
- Hibernate映射解析——七种映射关系
- Hibernate映射解析——七种映射关系
- Hibernate映射解析——七种映射关系
- A【1-1-9】逻辑运算符
- 浏览器访问网页的详细内部过程
- 零基础入门Linux
- Linux上不错的EPUB阅读软件
- python之re模块
- Hibernate 的七种映射关系
- 删除链表中间节点
- 键盘录入两个文件路径,将其中一个文件夹中的所有的文件复制到另一个文件中
- JAVASE第2天笔记
- Lesson 11: 绘制三角形
- 简单小程序敲着练手额~
- JAVASE第3天笔记
- JAVASE第4天笔记
- JAVASE第5天笔记