hibernate的映射关系

1集合映射

一个买家对应多个地址

Set集合的配置

<!--接下来我们应该配置的是我们的集合映射  set集合-->

<set name="addresses" table="t_address">

<!--这里的这个key相当于是要配置外键  那么这个外键 是会自动的映射到当前的class的主键-->

<!-- 下面的这个 u_id 会自动的映射成上面的主键的id值-->

<key column="u_id"></key>

<!--下面的这个列专门用来存放地址

下面记住因为是集合所以集合中的数据的数据类型必须要写  否则报错

-->

<element column="address" type="java.lang.String"></element>

</set>

 List集合配置

<!--接下来我们应该配置的是我们的集合映射  list集合-->

<list name="addresses" table="t_address_list">

<!--配置的是我们的外键-->

<key column="u_id"></key>

<!--下面就是和set集合唯一区别 下面这个配置表示的是排序的列-->

           <list-index column="indexs"></list-index>

<!--配置的是实质映射的字段-->

<element column="address" type="java.lang.String"></element>

</list>

  Map集合的配置

<!--下面就是map集合的映射-->

<map name="addresses" table="t_address_map">

<key column="u_id"></key>

 <map-key column="keys_001" type="java.lang.String"></map-key>

<element column="address" type="java.lang.String"></element>

</map>

注意:

1——在使用集合映射的时候  首先要掌握   必须要给定集合中的数据的数据类型   否则报错

2——在使用我们的List集合的是时候   需要给我们的List集合提供排序的列(必须的)

3——在使用map集合的时候   需要在集合映射表中添加key的映射字段

4——在集合中的<key></key>   这个表示的是集合要引用的键  这个外键是自动完成映射的

外键会主动的映射到我们的实体的主键中去

一对多映射配置文件:

<!--下面就配置的是一对多的集合映射-->

<set name="emps" table="t_employee" cascade="save-update,delete">

<!--集合中的外键会自动的映射到上面的主键-->

<key column="dept_id"></key>

 <one-to-many class="Employ"/>

</set>

2  多对一映射配置文件:

<many-to-one name="dept" class="Dept" column="dept_id"></many-to-one>

注意:实际开发中不需要两边配置,而且一般实际中都是多维护一

级联的问题 cascade

<set name="emps" table="t_employee" cascade="save-update">

<!--集合中的外键会自动的映射到上面的主键-->

<key column="dept_id"></key>

<one-to-many class="Employ"/>

</set>

cascade:级联 级联有三种 :save-update 级联的保存和更新   delete 级联的删除    all(前面两个家伙的并集)

级联的保存和更新是可以用的  但是在开发中一般情况下 级联的删除是不会用到的  因为他会影响到多张表

4多对多的关联映射

一个程序员可以开发多个项目    程序员----->项目(一对多的关系)

一个项目是由多个开发人员来进行开发   项目----->程序员(一对多的关系)

综上所述  两个一对多的关系就构成了  多对多的关系

 Project的一方的配置

<!--配置的是多对多的集合映射-->

<set name="devs" table="t_relation" cascade="all">

<!--上面的这个key你记住就是映射的当前的类的主键-->

<key column="pro_id"></key>

<!--配置的是相关联的另外一张表

column:配置的是对方的主键在关系表中映射的这个值的列名

class:配置的是对方的这个名字

-->

<many-to-many column="dev_id" class="Developer"></many-to-many>

</set>

 Developer一方的配置

<!--配置的是多对多的集合映射-->

<set name="pros" table="t_relation" cascade="all">

<!--上面的这个key你记住就是映射的当前的类的主键-->

<key column="dev_id"></key>

<!--配置的是相关联的另外一张表

column:配置的是对方的主键在关系表中映射的这个值的列名

class:配置的是对方的这个名字

-->

 <many-to-many column="pro_id" class="Project"></many-to-many>

</set>

5   继承映射

 1   普通的继承映射

需求:现在有动物(Animal这个类)  还有Dog这个类  和  Fish这个类  要求使用继承映射来完成这个关联关系的配置

<hibernate-mapping package="com.qf.extend2">

<class name="Dog" table="t_dog">

<!--配置的是表里面的主键-->

<id name="id" type="java.lang.Integer">

<generator class="native">

</generator>

</id>

<!--配置的是普通的列-->

<property name="color"></property>

<property name="name"></property>

<property name="num"></property>

</class>

</hibernate-mapping>

2  所有自类个父类对应一张表

分类:首先得有分类  只有有了分类之后那么这个才知道是谁的数据

表的字段应该包含所有的字段

<hibernate-mapping package="com.qf.extend3">

<class name="Animal" table="t_animal_01">

<!--配置的是表里面的主键-->

<id name="id" type="java.lang.Integer">

<generator class="native">

</generator>

</id>

<!-- 下面就配置一个非公共的 -->

<!--首先的整个分类

下面这个就是分类的这个列

-->

<discriminator column="type_" length="30" type="string"></discriminator>

<!--配置的是普通的列-->

<property name="color"></property>

<property name="name"></property>

<!--分别来配置我们的 dog 和  fish了-->

<subclass name="Dog" discriminator-value="dog_">

<!--要给这个孩子配置个类型-->

<property name="num" type="string"></property>

</subclass>

<!--配置鱼的信息-->

<subclass name="Fish" discriminator-value="fish_">

<property name="fishCoatCount" type="java.lang.Integer"></property>

</subclass>

</class>

</hibernate-mapping>

3所有类都对应表

1>:要实现分表的话那么首先要 将Anianl的主键自增长给我改了...

2>:使用的是join-class来完成分表的

<hibernate-mapping package="com.qf.extend4">

<class name="Animal" table="t_animal_02">

<!--配置的是表里面的主键-->

<id name="id" type="string">

<generator class="assigned">

</generator>

</id>

<!--配置的是普通的列-->

<property name="color"></property>

<property name="name"></property>

<!--接下来就是配置我们的分表了-->

<joined-subclass name="Dog" table="t_dog_02">

<!--这里的key会自动的映射到上面class的主键上面去-->

<key column="id"></key>

<!--配置的是其他的列-->

<property name="num"></property>

</joined-subclass>

<!--接下来配置我们的fish-->

<joined-subclass name="Fish" table="t_fish_02">

<!--这里的key会自动的映射到上面class的主键上面去-->

<key column="id"></key>

<!--配置的是其他的列-->

<property name="fishCoatCount"></property>

</joined-subclass>

</class>

</hibernate-mapping>

4  父类不对应表,子类都对应

为什么不用第一种呢?因为第一种要编写很多的配置文件  不好使...

<hibernate-mapping package="com.qf.extend5">

<!-- abstract="true":这个表示的是不对应表  -->

<class name="Animal" abstract="true">

<!--配置的是表里面的主键-->

<id name="id" type="string">

<generator class="assigned">

</generator>

</id>

<!--配置的是普通的列-->

<property name="color"></property>

<property name="name"></property>

<!--接下来就是配置加表的问题-->

<union-subclass name="Dog" table="t_dog_03">

<property name="num"></property>

</union-subclass>

<!--下面就配置鱼了-->

<union-subclass name="Fish" table="t_fish_03">

<property name="fishCoatCount"></property>

</union-subclass>

</class>

</hibernate-mapping>

6一对一映射

需求:人和身份证的问题

一个人 只有一个身份证

一个身份证是不是也只是对应了 一个人

人----->身份证   一对一的关系

身份证------>人  一对一的关系

身份证的配置

<hibernate-mapping package="com.qf.one2one">

<class name="IdCard" table="t_idcard">

<!--配置的是表里面的主键-->

<id name="cardId" type="java.lang.Integer">

<generator class="native">

</generator>

</id>

<!--配置的是普通的列-->

<property name="cardNum"></property>

<!--下面配置的是引用主键的这一方-->

<many-to-one name="people" column="p_id" class="People" cascade="all"></many-to-one>

</class>

</hibernate-mapping>

People的配置

<hibernate-mapping package="com.qf.one2one">

<class name="People" table="t_people">

<!--配置的是表里面的主键-->

<id name="pId" type="java.lang.Integer">

<generator class="native">

</generator>

</id>

<!--配置的是普通的列-->

<property name="name"></property>

<!--接下来应该配置一对一的映射-->

<one-to-one name="idCard" class="IdCard" cascade="all"></one-to-one>

</class>

</hibernate-mapping>

把第一个的主键作为第二个的主键

时间: 2024-10-12 23:40:14

hibernate的映射关系的相关文章

Hibernate基数映射关系

Hibernate基数映射关系 一.基数映射——一对一关系映射 每个账户对应一个地址的数据库关系为例: 1.SQL脚本:    -- 一对一(唯一外键)    drop table t_addr;    drop table t_act;    create table t_act(       id int primary key auto_increment,       actNo varchar(50) not null unique,       passwd varchar(50)

Hibernate关联映射关系

一.双向一对多关联映射关系:当类与类之间建立了关联,就可以方便的从一个对象导航到另一个或另一组与它关联的对象(一对多双向关联和多对一双向关联是完全一样的) 1.1创建实体类(Emp(员工),Dept(部门)) /* * 员工实体类 */public class Emp { private Integer empId; //员工编号 private String empName; //员工姓名 private Dept dept; //所处部门 //get(),set()方法省略 } /* * 部

Hibernate One2Many映射关系

多对一映射与一对多映射: 使用部门和员工的关系来说明问题.一个部门可以有多个员工,但是一个员工只属于一个部门. 开发步骤: (1)JavaBean的设计,Dept(部门表) Employee(员工表) (2)映射关系 (3)测试 1.Dept和Employee Javabean Dept package cn.itcast.one2many; import java.util.HashSet; import java.util.Set; public class Dept { private i

Hibernate many2many映射关系

多对多映射关系: 开发步骤: JavaBean 映射文件  测试 图片详解: 1.javaBean  Project.java package cn.itcast.many2many; import java.util.HashSet; import java.util.Set; public class Project { private int proj_id; @Override public String toString() { return "Project [proj_id=&qu

hibernate annotation映射关系详解

在hibernate中处理关系映射的方法有两种.一种是使用传统的xml来处理它们的映射关系,另一种是基于annotation的注解方式.我个人非常喜欢使用annotation,觉得这种方式显得更加的简洁,大大减少工作量.在hibernate4中annotation包无需再引入,因为已经集成了annotation包. 在讲hibernate annotation之前,我们先回想一下.在数据库创建表的时候有几个关键点是必须的.表名.字段名.字段类型.约束条件.从这些点出发我们来看看一个hiberna

Hibernate对象映射关系:一对一

一:项目截图 二:业务代码 package com.cloud.domain; import java.util.Date; public class IdCard { private Integer id; private Date validateDte; private Person person; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Dat

Hibernate对象映射关系:多对一

一:项目截图 二:业务代码 package com.cloud.domain; import java.util.Set; public class Department implements java.io.Serializable{ /** * 实现java.io.Serializable 接口的类是可序列化的. * 没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化. */ private static final long seriaVersionUID = 1L; privat

java框架篇---hibernate(一对一)映射关系

对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术,本质上就是将数据从一种形式转换到另外一种形式. 面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统.对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据.内存中的对象之间存在关联和继承关系,而在数据库中,关系数

hibernate的映射关系之一对多

关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间通过某种方式联系起来. 映射:这里指java对象和数据库表的一种对应关系.动词:形成这种对应关系. 级联:有关系的双方中操作一方,另一方也将采取一些动作. 关联的联系种类 在不考虑关联的方向前提下,联系就是关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 一对一联系(1:1):如用户和身份证.一

Hibernate学习——映射关系

学习记录 O(∩_∩)O . 如果你恰巧路过,希望你能停下脚步瞧一瞧,不足之处望指出,感激不尽~ 使用工具: 1.eclipse   2.hibernate压缩包(hibernate_4.3.11) 3.mysql 准备工作: 创建工程——>导入hibernate.jar包——>编写 hibernate.cfg.xml 配置文件 连接数据库 编写一个类读取hibernate.cfg.xml 一.单向一对多(例子:一个部门有多个员工)     1.建表(Employee员工表和dpet部门表)