09---hbm映射文件配置和主键生成策略

7人阅读 评论(0) 收藏 举报
分类:

hbm映射文件配置和主键生成策略

1.hbm文件配置     
    配置类到指定数据库中表的映射 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 完成实体类 和 数据表 映射 -->
<hibernate-mapping>
<!-- 1、类与表的映射 -->
<!--
name 类名
table 表名
catalog 数据库名
-->
<class name="cn.itcast.domain.Customer" table="customer" catalog="hibernate3day1">
<!-- 2、类中属性 与 表中 数据列 映射 -->
<!-- 主键 -->
<!--
name 属性名(类中)
column 列名 (表中)
type 类型
-->
<id name="id" column="id" type="int">
<!-- 主键策略 identity 主键自增长 -->
<generator class="native"></generator>
</id>
<!-- 普通属性 -->
<property name="name" column="name" type="java.lang.String" not-null="true"></property> <!-- java类型 -->
<property name="age" column="age" type="int"></property>
<property name="city">
<column name="city" sql-type="varchar(20)"></column> <!-- SQL类型 -->
</property>
</class>
<!-- 在配置文件中 定义SQL,给SQL命名,在程序通过login 使用SQL -->
<sql-query name="login">
<![CDATA[select * from user where username= ? and password =?]]>
</sql-query>
</hibernate-mapping>
    * 在配置过程中,省略column 和 type ,如果不写column 生成列名就是属性名, 不写type将按照 类中属性类型自动映射 
    * 配置列其它属性 unique="true" 唯一  not-null="true" 非空  length="20" 长度

2.主键的生成策略 
    在<id>元素中 通过 <generator class="生成策略"></generator> 指定数据表主键生成策略 

    常用六种主键生成策略
increment
    increment 标识符生成器由 Hibernate 以递增的方式为代理主键赋值
原理:select max(id) , insert max(id)+1 
* 使用 increment 创建数据表 没有主键自增长, 通过hibernate在程序内部完成自增 
* 好处跨平台 ,缺点 高并发访问时,可以出现主键冲突问题
identity (无线程问题)---- Mysql
    identity 标识符生成器由底层数据库来负责生成标识符, 它要求底层数据库把主键定义为自动增长字段类型
原理: 依赖数据库内部自增长,和hibernate无关 
* 创建数据表 `id` int(11) NOT NULL AUTO_INCREMENT
* 优点,无需程序处理,数据库自己完成主键增长,缺点 Mysql支持 自增主键, oracle 不支持
sequence  --- Oracle
    sequence  标识符生成器利用底层数据库提供的序列来生成标识符
原理: 依赖数据库序列支持 ,和hibernate程序无关
* Oracle 支持序列, Mysql 不支持序列
* 序列原理 
create sequence customer_seq;
insert into customer(id) values(customer_seq.nextval); 自动序列+1 
native
    native 标识符生成器依据底层数据库对自动生成标识符的支持能力, 来选择使用 identity, sequence 或 hilo 标识符生成器. 
* Mysql 自动选择 identity , oracle 自动选择 sequence
uuid
    uuid 的主键生成,采用String 类型主键 
随机生成32位字符串 
assigned
    前五种策略,都是代理主键生成策略
assigned 是自然主键生成策略 ---- 必须用户在程序中指定 (无法自动生成)

* 复合主键 (联合主键),一个数据表中多列共同作为主键 -----复合主键是一种特殊 assigned 策略
<composite-id>
    <!-- 配置多列 -->
<key-property name="firstname"></key-property>
<key-property name="secondname"></key-property>
</composite-id>
错误:
    Caused by: org.hibernate.MappingException: composite-id class must implement Serializable: cn.itcast.domain.Person

复合主键类必须实现序列化接口 


查看评论

Guru of the Week #7:编译时期的依赖关系(Compile-time Dependences)

作者:Herb Sutter译者:plpliuly/*此文是译者出于自娱翻译的GotW(Guru of the Week)系列文章第7篇,原文的版权是属于Herb Sutter(著名的C++专家,"E...
  • plpliuly
  • plpliuly
  • 2001-03-24 22:40:00
  • 756

映射文件中主键生成策略的指定

  • fandoudou123
  • fandoudou123
  • 2016-05-16 17:48:33
  • 801

【hibernate学习之路3】Hibernate核心接口,主键生成策略

本文中,将介绍一些Hibernate核心接口Hibernate核心接口 首先介绍一下Hibernate部分核心接口...
  • csustGG
  • csustGG
  • 2015-05-09 10:49:28
  • 234

hibernate生成实体时对应的映射文件中主键的生成策略

:用于指定主键的生成策略。它的值有多, -------------------------------------------------------------------------------...
  • sxty0220
  • sxty0220
  • 2013-03-22 14:58:30
  • 640

Hibernate实体类映射文件demo.hbm.xml 中的<generator class="?"></generator>的不同属性含义

1) assigned 主键由外部程序负责生成,无需Hibernate参与。 2) hilo 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主 键生成历史状态。 3)...
  • kalision
  • kalision
  • 2013-06-03 15:17:33
  • 2749

Hibernate Annotation配置主键生成策略

通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id 其生成规则由@GeneratedValue设定的,这里的@Id和@Gener...
  • z69183787
  • z69183787
  • 2013-12-12 14:37:20
  • 783

hibernate JPA注解主键生成策略

Id生成策略: @GeneratedValue,JPA通用策略生成器 。         JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.      ...
  • java122java
  • java122java
  • 2016-11-02 21:38:30
  • 404

hibernate 配置Oracle主键生成策略

@Id @Column(name="[id]") @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="seqhilo") ...
  • xwygn
  • xwygn
  • 2012-12-28 10:02:16
  • 2716

【5】Hibernate的主键生成策略

1、表中主键分类: (1)自然主键:建表的时候,使用对象中本身的属性作为表的主键。 (2)代理主键:没有使用对象中的自身的属性作为表中的主键,使用和对象不相关的属性作为主键。 注:在建表的时候,...
  • lwt976647637
  • lwt976647637
  • 2016-11-26 15:57:28
  • 1032

java配置一对多

  • 2011年10月28日 15:52
  • 872B
  • 下载
    个人资料
    等级:
    访问量: 5889
    积分: 742
    排名: 7万+
    文章存档