Hibernate映射配置方法
*************************Hibernate基本映射
hibernate通过映射文件知道如何加载(load)和存储(store)持久化类的对象,映射文件告诉hibernate应该访问数据库(database)里面的哪张表(table)及应该使用表里面的哪些字段(column).
实体类-----表 ,采用<class>标签映射;
实体类中的普通属性(不包括集合、自定义类和数组)---表字段,采用<property>标签映射
注意:如果实体类的名称或实体类中属性名称与数据库关键字重复,将会出现问题
可以考虑采用table属性和column属性对其进行得新命名
实体类的设计原则:
*实现无参的默认的构造函数
*提供一个标识
*建议不要用fianl修饰实体类
*建议为实体类生成getter和setter方法
映射文件重要标签:
1.<DOCTYPE>
2.<hibernate-mapping>
3.<class>
4.<id>
5.<Generator>
可选的<generator>子元素是一个Java类的名,用来为该持久类的实例生成唯一的标识.如果这个生成器实例需要某些配置值或者初始化参数,用<param>元素.
所有的生成器都实现org.hibernate.id.IdentifierGenerator接口,某些应用程序可以选择提供他们自己特定的实现.当然,Hibernate提供了很多内置的实现.下面是一些内置生成器的快捷名字:
主要了解以下生成策略:
*identity
*sequence
*uuid
*native
*assigned
*foreign
6.<composite_id>
7.<discriminator>
8.<property>
************************************关联映射
01.多对一单向映射(User<--Group)
02.多对多双向映射(User<-- Role)
03.多对多单向映射(User<--Role)
04.一对一主键双向(Person--> IdCard)
05.一对一主键单向(Person--> IdCard)
06.一对一外键单向(Person--> IdCard)
07.一对一外键双向(Person<--> IdCard)
08.一对多单向(Group--> User)
09.一对多双向(Group<—> User)
10.继承映射(Pig和Bird 继承Animal)
--一棵继承树映射成一张表
11.继承映射(Pig和Bird 继承Animal)
--一每个具体类映射成一张表joined-classs
12.继承映射(Pig和Bird 继承Animal)
--一每个子类类映射成一张表union-subclass
13. component映射
14. Set,Map,Arrary[],List映射
************************************
1.多对一单向映射(User- ->Group)
【Group.hbm.xml文件如下:】
<hibernate-mapping>
<class name="com.dragon.hibernate.Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
【User.hbm.xml文件如下:】
<hibernate-mapping>
<class name="com.dragon.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="group" column="groupid"/>
</class>
</hibernate-mapping>
---------------------------------------------------------
2.多对多双向映射(User<- -Role)
【User.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="roles" table="t_user_role">
<key column="userid"/>
<many-to-many class="com.dragon.hibernate.Role" column="roleid"/>
</set>
</class>
</hibernate-mapping>
【Role.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="users" table="t_user_role">
<key column="roleid"/>
<many-to-many class="com.dragon.hibernate.User" column="userid"/>
</set>
</class>
</hibernate-mapping>
---------------------------------------------------------
3.多对多单向映射(User<--Role)
在User端使用set 引用role 维持关系,则User.hbm.xml文件同上面的双向一样,只有Role.hbm.xml文件稍微有所小小的不同,比双向更简单。
【Role.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
【User.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="roles" table="t_user_role">
<key column="userid"/>
<many-to-many class="com.dragon.hibernate.Role" column="roleid"/>
</set>
</class>
</hibernate-mapping>
---------------------------------------------------------
4.一对一主键双向(Person--> IdCard)
【Person.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.Person" table="t_person">
<id name="id">
<generator class="foreign">
<param name="property"> idcard</param>
</generator>
</id>
<property name="name"/>
<one-to-one name="idcard" constrained="true"/>
</class>
</hibernate-mapping>
【Idcard.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="idno"/>
<one-to-one name="person"></one-to-one>
</class>
</hibernate-mapping>
One-to-one标签指示hibernate如何加载关联对象,默认是根据主键加载;
constrained="true"表示当前主键存在一个约束,person的主键作为外键参照idcard。
---------------------------------------------------------
5.一对一主键单向(Person--> IdCard)
Person.hbm.xml文件如下相同
Idcard.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.dragon.hibernate.IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="idno"/>
</class>
</hibernate-mapping>
与双向的只是少了这句<one-to-one name="person"> </one-to-one> ---------------------------------------------------------
6.一对一外键单向(Person--> IdCard)
IdCard.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.dragon.hibernate.IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="idno"/>
</class>
</hibernate-mapping>
Person.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.dragon.hibernate.Person" table="t_person">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="idcard" column="idcardid" unique="true"/>
</class>
</hibernate-mapping>
---------------------------------------------------------
7.一对一外键双向(Person<--> IdCard)
Person.hbm.xml文件与单向一样
IdCard.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.dragon.hibernate.IdCard" table="t_idcard">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<one-to-one name="person" proper-ref=“idcard”/>
</class>
</hibernate-mapping>
---------------------------------------------------------
8.一对多单向(Group--> User)
注意,在key中的外键 <key column="groupid"/>要一致不然要生成中间表
【Group.hbm.xml文件如下】
<hibernate-mapping package="com.dragon.hibernate">
<class name="Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="users">
<key column="groupid"/>
<one-to-many class="User"/>
</set>
</class>
</hibernate-mapping>
【User.hbm.xml文件如下】
<hibernate-mapping>
<class name="com.dragon.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
---------------------------------------------------------
9.一对多双向(Group<--> User)
【Group.hbm.xml文件如下】
<hibernate-mapping package="com.dragon.hibernate">
<class name="Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="users" cascade="all">
<key column="groupid"/>
<one-to-many class="User"/>
</set>
</class>
</hibernate-mapping>
【User.hbm.xml文件如下:】
<hibernate-mapping>
<class name="com.dragon.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="groups" column="groupid"/>
</class>
</hibernate-mapping>
---------------------------------------------------------
10.继承映射(Pig和Bird 继承Animal)
--一棵继承树映射成一张表--一
extends.hbm.xml文件如下:
<hibernate-mapping package="com.dragon.hibernate">
<class name="Animal" table="t_extends">
<id name="id">
<generator class="native"/>
</id>
<discriminator column="type" type="string"/>
<property name="name"/>
<property name="sex"/>
<subclass name="Pig" discriminator-value="P">
<property name="weight"/>
</subclass>
<subclass name="Bird" discriminator-value="B">
<property name="height"/>
</subclass>
</class>
</hibernate-mapping>
---------------------------------------------------------
11.继承映射(Pig和Bird 继承Animal)
--一每个具体类映射成一张表joined-classs--一
extends.hbm.xml文件如下:
<hibernate-mapping package="com.dragon.hibernate">
<class name="Animal" table="t_animal">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="sex"/>
<joined-subclass name="Pig" table="t_pig">
<key column="pid"/>
<property name="weight"> </property>
</joined-subclass>
<joined-subclass name="Bird" table="t_bird">
<key column="bid"/>
<property name="height"> </property>
</joined-subclass>
</class>
</hibernate-mapping>
---------------------------------------------------------
12.继承映射(Pig和Bird 继承Animal)
--每个子类类映射成一张表union-subclass--一
extends.hbm.xml文件如下:
<hibernate-mapping package="com.dragon.hibernate">
<class name="Animal" table="t_animal">
<id name="id">
<generator class="uuid"/>
</id>
<property name="name"/>
<property name="sex"/>
<union-subclass name="Pig" table="t_pig">
<property name="weight"/>
</union-subclass>
<union-subclass name="Bird" table="t_bird">
<property name="height"/>
</union-subclass>
</class>
</hibernate-mapping>
**注释在使用<id name="id">
<generator class="uuid"/>
</id> 是不能将<generator class="uuid"/> 改写成<generator class="native"/> ,不然会出错。相应的Animal类中的id字段类型也要该为String.
如果在<class name="Animal" table="t_animal"> 中添加Abstract="true"可以使hibernate不生成表t_animal
---------------------------------------------------------
13. component映射
component.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.bjsxt.hibernate.User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<component name="contact">
<property name="email"/>
<property name="address"/>
<property name="zipCode"/>
<property name="contactTel"/>
</component>
</class>
</hibernate-mapping>
User类中有以下属性:
private int id;
private String name;
private Contact contact;它不再是一种引用了
---------------------------------------------------------
14. Set,Map,Arrary[],List映射
CollectionMapping.hbm.xml文件如下:
<hibernate-mapping>
<class name="com.bjsxt.hibernate.CollectionMapping" table="t_CollectionMapping">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="setValue" table="t_set_value">
<key column="set_id"/>
<element type="string" column="set_value"/>
</set>
<list name="listValue" table="t_list_value">
<key column="list_id"/>
<list-index column="list_index"/>
<element type="string" column="list_value"/>
</list>
<array name="arrayValue" table="t_array_value">
<key column="array_id"/>
<list-index column="array_index"/>
<element type="string" column="array_value"/>
</array>
<map name="mapValue" table="t_map_value">
<key column="map_id"/>
<map-key type="string" column="map_key"/>
<element type="string" column="map_value"/>
</map>
</class>
</hibernate-mapping>
转载于:https://www.cnblogs.com/pyrmkj/p/3332460.html
Hibernate映射配置方法相关推荐
- 配置方法_CISCO防火墙端口映射配置方法
今天朗联来为大家分享CISCO防火墙端口映射配置方法,首先先简单介绍一下什么是防火墙,Cisco防火墙是网络间的墙,主要为防止非法侵入,过滤信息等,从结构上讲,简单地说是一种PC式的电脑主机加上闪存( ...
- mysql filter_MySQL 过滤复制+复制映射 配置方法
场景 node1 和 node2 为两台不同业务的MySQL服务器. 业务方有个需求,需要将node1上的 employees库的departments .dept_manager 这2张表同步到 n ...
- NAT技术与端口映射使用方法
静态NAT: 本地地址与全局地址(公网)之间一对一映射,即一台主机对应一个公网IP. #ip nat inside source static 192.168.1.10 188.188.90.18 ...
- 华三路由器做端口映射配置
华三路由器的端口映射配置方法如下: 打开浏览器,在地址栏中输入华三路由器的 IP 地址,然后按回车键登录路由器的管理界面. 在管理界面中,选择"高级设置",然后选择"端口 ...
- mysql hibernate id generator_Hibernate映射文件id的generator配置方法
可选的子元素是 一个Java类的名称,用来生成该持久化类实例的唯一标识符.如果这个生成器实例需要某些配置值或者初始化参数,可以使用元素来传递这些参数. 所有的生成器都实现了org.hibernate. ...
- 怎样给oracle表设置序列,Oracle的sequence序列在hibernate中的配置方法
Oracle自增序列在Hibernate中的配置方法 在很多情况下,我们使用Hibernate在已经建立好数据库的基础上.在oracle中,如果已经建立好的数据库中使用了sequence,则可以按照下 ...
- Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明
1 主配置文件 Hibernate.cfg.xml 主配置文件中主要配置:数据库连接信息.其他参数.映射信息! 常用配置查看源码: hibernate-distribution-3.6.0.Final ...
- 操作篇 了解学习NAT实验(关于静态NAT、动态NAT、EasyIP、端口映射的配置方法))
文章目录 前言 NAT工作原理 NAT分类 一:实验环境 1.1:实验原理 1.2实验目的 1.3华为NAT实验拓扑图 二:实验过程 配置SW1 配置AR1: 配置AR2: 前言 随着Internet ...
- Hibernate实体映射配置1(java@注解方式)
实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取.在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义. 本文以java注解的形式总结映射关 ...
最新文章
- Spring Boot Admin 2.5.5 发布,支持在线重启服务
- 遇到上亿(MySQL)大表的优化....
- Python:__slots__()方法和@property方法
- leetcode 227. Basic Calculator II | 227. 基本计算器 II(中缀表达式求值)
- nginx 上传 文件超时设置_Nginx在高并发下的性能优化点!有这篇就够了!
- linux 扫描开放的端口命令,在Linux系统中检查(扫描)开放端口的方法
- 简单实践GraphEmbedding图嵌入的几种方法
- 好程序员web前端培训分享JavaScript学习笔记ajax及ajax封装
- SPSS基本数据处理(二)
- 微信小程序中使用阿里ICON图标
- 基于FME实现地铁路径规划
- c语言编写坦克大战设计报告,c语言编写坦克大战源代码
- IPv6的DNS,设置DNS
- 苹果电脑基于Android File Transfer for mac连接Android设备
- 手机上的浏览器有几种内核
- windows 配置host
- 台风康妮超级计算机,台风康妮最新消息 2013年第15号台风康妮实时路径图
- 【运维心得】wps云文档被其他程序锁定了怎么办?
- 【读书笔记】万物原理——打开客观世界与主观情感的大门
- 日语900句(衣食住行)PDF下载地址|百度云盘免费分享
热门文章
- Spring IOC和MVC基础知识
- Linux下查看文件夹下文件个数
- Leetcode 138. 复制带随机指针的链表 解题思路及C++实现
- Scapy学习笔记二
- Python函数作为参数传递给函数
- currentThread的一个复杂案例
- Set Up a Mobile Worker
- is NULL , is NOT NULL 有时索引失效 || in 走索引, not in 索引失效 ||单列索引和复合索引 || 查看索引使用情况
- JUC里面的相关分类|| java并发编程中,关于锁的实现方式有两种synchronized ,Lock || Lock——ReentrantLock||AQS(抽象队列同步器)
- MyBatis-Plus 通用IService的使用