Hibernate关联关系映射
2016-12-29 20:57
555 查看
一、多对一
1.多对一单向关联映射:对于多对一单向关联,Hibernate会在多的一端加入外键与一的一端建立关联关系
多对一单项关联的实体
对象映射后的数据表
关键代码:
2.多对一双向关联
多对一双向关联的实体对象
Book的xml文件不变,为Category添加<set>
1.一对一主键关联映射:同样分为单向与双向映射,以双向为例
表关系
可以看出IdCard主键参照了User的外键,与User主键是一对一的关系。
实体关系
2.一对一外键关联映射:在其中一端加入一个外键指向另一端
表关系
三、多对多关联映射
需要借助第三张表进行实现
表关系
附:建立数据库表的Java语句,运行后生成数据表,如果已存在,会删除重新建表
声明:本文整理自《学通Java Web的24堂课》陈丹丹、卢瀚等著一书中的章节
1.多对一单向关联映射:对于多对一单向关联,Hibernate会在多的一端加入外键与一的一端建立关联关系
多对一单项关联的实体
对象映射后的数据表
关键代码:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lyq.model"> <class name="Book" table="tb_book_manytoone1"> <!-- 主键 --> <id name="id"> <generator class="native"/> </id> <!-- 图书名称 --> <property name="name" not-null="true" length="200" /> <!-- 作者 --> <property name="author" not-null="true" length="50"/> <!-- 多对一关联映射 --> <many-to-one name="category" class="Category"> <!-- 映射的字段 --> <column name="categoryId"/> </many-to-one> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lyq.model"> <class name="Category" table="tb_Category_manytoone1"> <id name="id"> <generator class="native"/> </id> <property name="name" not-null="true" length="200" /> </class> </hibernate-mapping>
2.多对一双向关联
多对一双向关联的实体对象
Book的xml文件不变,为Category添加<set>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lyq.model"> <class name="Category" table="tb_Category_manytoone2"> <!-- 主键 --> <id name="id"> <generator class="native"/> </id> <!-- 类别名称 --> <property name="name" not-null="true" length="200" /> <!-- 一对多映射 --> <set name="books"> <key column="categoryId"/> <one-to-many class="Book"/> </set> </class> </hibernate-mapping>二、一对一
1.一对一主键关联映射:同样分为单向与双向映射,以双向为例
表关系
可以看出IdCard主键参照了User的外键,与User主键是一对一的关系。
实体关系
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.lyq.model.User" table="tb_user_onetoone_p"> <!-- 主键id --> <id name="id"> <generator class="native"/> </id> <!-- 姓名 --> <property name="username" not-null="true" /> <!-- 年龄 --> <property name="age"/> <!-- 一对一映射 --> <one-to-one name="idCard"/> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.lyq.model.IdCard" table="tb_idCard_onetoone_p"> <!-- 主键id --> <id name="id"> <!-- 参考User的外键 --> <generator class="foreign"> <param name="property">user</param> </generator> </id> <!-- 证件号 --> <property name="num" not-null="true"/> <!-- 一对一映射 --> <one-to-one name="user" constrained="true"/> </class> </hibernate-mapping>
2.一对一外键关联映射:在其中一端加入一个外键指向另一端
表关系
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.lyq.model.IdCard" table="tb_idCard_onetoone_f"> <!-- 主键id --> <id name="id"> <generator class="native"/> </id> <!-- 证件号 --> <property name="num" not-null="true"/> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.lyq.model.User" table="tb_user_onetoone_f"> <!-- 主键id --> <id name="id"> <generator class="native"/> </id> <!-- 姓名 --> <property name="username" not-null="true" /> <!-- 年龄 --> <property name="age"/> <!-- 一对一映射 --> <many-to-one name="idCard" unique="true"/> </class> </hibernate-mapping>使用<many-to-one>标签进行映射,此标签用于多对一映射,但其unique属性可以限制其关联的唯一性,从而构成了一对一唯一外键映射。
三、多对多关联映射
需要借助第三张表进行实现
表关系
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.lyq.model.Course" table="tb_course_manytomany"> <!-- 主键id --> <id name="id"> <generator class="native"/> </id> <!-- 姓名 --> <property name="name" not-null="true" /> <!-- 多对多映射 --> <set name="students" table="tb_student_course"> <key column="courseId"/> <many-to-many class="com.lyq.model.Student" column="studentId"/> </set> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lyq.model"> <class name="Student" table="tb_student_manytomany"> <!-- 主键id --> <id name="id"> <generator class="native"/> </id> <!-- 姓名 --> <property name="name" not-null="true" /> <!-- 年龄 --> <property name="age"/> <set name="course" table="tb_student_course"> <key column="studentId"/> <many-to-many class="Course" column="courseId"/> </set> </class> </hibernate-mapping>注:Student_Course表会自动生成。
附:建立数据库表的Java语句,运行后生成数据表,如果已存在,会删除重新建表
import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; /** * 导出数据表 * @author Li Yong Qiang */ public class ExportTables { public static void main(String[] args) { //加载配置信息 Configuration cfg = new Configuration().configure(); //实例化SchemaExport对象 SchemaExport export = new SchemaExport(cfg); //导出数据表 export.create(true, true); } }
声明:本文整理自《学通Java Web的24堂课》陈丹丹、卢瀚等著一书中的章节
相关文章推荐
- hibernate多对一关联关系的映射与原理分析
- Hibernate关联关系映射-----单向一对一映射配置
- Hibernate关联关系配置-----基于连接表的双向一对多/多对一映射配置
- 攻城狮在路上(壹) Hibernate(十一)--- 映射实体关联关系
- Hibernate 实体关联关系映射----总结
- SSH:Hibernate框架(七种关联关系映射及配置详解)
- Hibernate_映射_关联关系_一对一映射3_基于主键的方式
- Hibernate关联关系映射(一对多/多对一)
- Hibernate关联关系映射_引言
- Hibernate(六):映射一对多关联关系、双向一对多映射
- 7.6 hibernate映射_单向多对多关联关系
- Hibernate的关联关系映射
- hibernate映射一对多双向关联关系
- hibernate关联关系映射
- Hibernate中用left join(左外连接)查询映射中没有关联关系的两个表记录问题
- Hibernate 实体关联关系映射(转载)
- 分析Hibernate映射的关联关系
- Hibernate: 关联关系一对多映射
- hibernate-关联关系映射配置
- Hibernate关联关系映射-----单向一对一映射配置