- 浏览: 686647 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (362)
- java基础 (33)
- html/css+div/javascript (17)
- Ajax/XML/JSON/XSL (7)
- JQuery (11)
- Extjs (1)
- JSP/Servlet (19)
- MVC模式 (4)
- struts 1 (17)
- Struts 2.3.4 (17)
- Spring 3.2 (26)
- Springmvc (3)
- Hibernate 4.1 (21)
- ibatis (6)
- Velocity模板语言 (2)
- Rose框架 (5)
- EJB (1)
- JUnit测试 (2)
- 数据库DB (24)
- 重构 / 设计模式 (3)
- 开发工具IDE (37)
- 数据结构与算法设计 (3)
- Android (12)
- Linux (4)
- bug集合 (29)
- 缓存技术(redis) (3)
- Lucene全文索引 (15)
- maven3.0.5 (4)
- 小工具集合 (18)
- 面试题 (5)
- 闲聊 (11)
- 其他 (4)
- 接口API (2)
- work (2)
- Flex (0)
- JMS (1)
- 开源项目集合 (1)
- 技术博客 (1)
- 分类04 (0)
- 分类05555 (0)
最新评论
-
小小小羊:
好屌...
java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$Refle -
liubinli2005:
这个可以脱底spring。单独使用吗?
DAO层:jade -
cangbaotu:
我觉得对于开发者来说,能脚本化编写爬虫是一件挺开心的事情( ̄▽ ...
网页爬取 -
asjava:
很好的文章, 但每段代码清单都重复了一次.
spring 事务 -
xia635317478:
jethypc 写道验证码的session无法传过去啊 还是我 ...
登陆验证码(struts2实现)
ID生成策略
1.XX.hbm.xml方式
a、常用四个:native identity sequence uuid
Native主键生成方式会根据不同的底层数据库自动选择Identity、Sequence、Hilo主键生成方式
特点:根据不同的底层数据库采用不同的主键生成方式。由于Hibernate会根据底层数据库采用不同的映射方式,因此便于程序移植,项目中如果用到多个数据库时,可以使用这种方式
b、
<!-- UUID 生成策略 --> <!-- ID类型 必须是 String --> <!-- 类似于网卡生成的类型 --> <class name="Person"> <id name="id"> <generator class="uuid"></generator> </id> <property name="name"/> <property name="weight"/> </class> <!--native 生成策略--> <!-- ID类型 必须是 int--> <!--由数据库自动递增--> <id name="id" > <generator class="native"></generator> </id> <id name="id" column="team_id"> <generator class="identity"/> </id>
2.JPA注解生成方式@GeneratedValue
JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制。
a、 @GeneratedValue 默认为native
b、 @GeneratedValue(strategy=GenerationType.AUTO)
主键自增长
i. 默认:对 MySQL,使用auto_increment
ii. 对 Oracle使用hibernate_sequence(名称固定)
c、 @GeneratedValue(strategy=GenerationType.IDENTITY)
不能用于oracle,因为oracle不支持IDENTITY; oracle是SEQUENCE
d、 SEQUENCE(@GeneratedValue(strategy=GenerationType.SEQUENCE))
@SequenceGenerator(可自定义在数据库生成指定的sequence名)
例如:
//定义sequence名为teacherSEQ @SequenceGenerator(name="teacherSEQ",sequenceName="teacherSEQ_DB") public class Teacher { private int id; } //调用自定义的teacherSEQ @Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="teacherSEQ") public int getId() { return id; } public void setId(int id) { this.id = id; }
e、Table
@Entity @TableGenerator(name="sequence_team",table="team") //可以设置表名,表列名,表初始值等等信息 从而取代了@Table(name="team") public class Team { private int id; private String name; @Id @GeneratedValue(strategy=GenerationType.TABLE,generator="sequence_team") public int getId() { return id; } ........ }
Hibernate的id生成策略有下面几种:[/
color]
1.Increment
用于为long,short或者int类型生成唯一标识,只有在没有其他进程往同一张表中插入数据库时才能使用。在集群下不要使用。
对于集群为什么不要使用,是因为在一个大型的项目中如果我们有很多的服务器为项目提供服务,这样就会出项一种情况,A服务在15:25拿到数据库中的数据的 id为15,此时B服务器向数据库中插入了一条数据,这时数据库中的id为16了,但A服务中的session依旧保存着15,但下一条数据通过A服务向数据库中保存数据的时候session会为id赋值为16,可数据库中的id已经为16了,所以这时保存就会出错。
2.identity:
对 DB2,MySQL,MS SQL Server,Sybase 和 HypersonicSQL 的内置标识字段提供支持。返回的标识符是 long,short 或者 int 类型的。
3.sequence
在 DB2,PostgreSQL,Oracle,SAP DB,McKoi 中使用序列(sequence), 而在 Interbase
中使用生成器(generator)。返回的标识符是 long,short 或者 int 类型的。
4.hilo
使用一个高/低位算法高效的生成 long,short 或者 int 类型的标识符。给定一个表和字段(默认分别是 hibernate_unique_key 和 next_hi)作为高位值的来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。
5.seqhilo
使用一个高/低位算法来高效的生成 long,short 或者 int 类型的标识符,给定一个数据库序列(sequence)的名字。
6.uuid
基于一个自定义的算法生成一个128位的UUID。所产生的价值
表示为32个十六进制数字的字符串。
7.guid
在 MS SQL Server 和 MySQL 中使用数据库生成的 GUID 字符串。
8.native
根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个。
9.assigned
让应用程序在调用 save() 之前为对象分配一个标识符。这是 <generator> 元素没有指定时的默认生成策略。
10.select
通过数据库触发器选择一些唯一主键的行并返回主键值来分配一个主键。
11.foreign
使用另外一个相关联的对象的标识符。它通常和 <one-to-one> 联合起来使用。
12.sequence-identity
一种特别的序列生成策略,它使用数据库序列来生成实际值,但将它和 JDBC3 的getGeneratedKeys 结合在一起,使得在插入语句执行的时候就返回生成的值。目前为止只有面向 JDK 1.4 的 Oracle 10g 驱动支持这一策略。由于 Oracle 驱动程序的一个 bug,这些插入语句的注释被关闭了。
我们通常用的比较多的就是[color=red]native、identity、sequence在一些情况下我们会用到uuid,其他的就用的很少了。
举例说明uuid
下面来测试一下uuid,还用原来的Student类,既然是测试uuid那我们的id就必须为String类型了。
Student类
package cc.tukai.entity; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; //@Entity //@Table(name = "Student") public class Student implements Serializable { private static final long serialVersionUID = -5596241291862147220L; private String id; private String name; private int age; //@Id public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }
Student.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cc.tukai.entity"> <class name="Student" table="student"> <id name="id" column="id"> <generator class="uuid"></generator> </id> <property name="name" type="java.lang.String"> <column name="name" length="32"></column> </property> <property name="age" type="java.lang.Integer"> <column name="age" length="10"></column> </property> </class> </hibernate-mapping>
发表评论
-
hibernate缓存总结
2013-09-05 09:54 723hibernate缓存总结 Hibernat ... -
Hibernate原理
2013-09-05 09:10 1158Hibernate原理 1.hibernate ... -
getHibernateTemplate().save和super.getHibernateTemplate().merge
2012-12-05 15:16 2974代码1_save: super.getHibernate ... -
分页查询
2012-12-03 16:57 818HibernateTemplate提供了非常多的常用方法来完成 ... -
mappingResource属性和mappingDirectoryLocations属性的使用
2012-11-19 16:54 579mappingResource属性和mappingDirect ... -
S2SH整合
2012-11-12 16:08 1035Struts2_spring_Hibernate整合 MyE ... -
spring中配置log4j
2012-11-10 16:30 1616log4j 和 slf4j slf4j和log4j用于做日志 ... -
log4j 和slf4j
2012-11-11 20:55 839http://sishuok.com/forum/blogPo ... -
Hibernate两级缓存
2012-10-29 17:01 749Hibernate两级缓存 一级缓存就是Session级别 ... -
数据加载 load get list iterator
2012-10-07 11:14 1045Hibernate的优化-数据加载 除了对映射文件的配置外 ... -
栏目、帖子、回复(设置导航ManyToOne便于操作 QBC/QBE语句)02
2012-10-06 11:39 1046栏目、帖子、回复(设置导航ManyToOne便于操作QBC/Q ... -
栏目、帖子、回复(设置导航便于操作)HQL使用01
2012-10-06 11:28 926栏目、帖子、回复(设置导航ManyToOne便于操作 HQL语 ... -
Many-To-Many (学生、课程、分数)
2012-10-05 17:41 1303Many-To-Many (学生、课程、分数) 多对多: 一个 ... -
树状结构Tree
2012-10-05 17:09 1138树状结构Tree 一、部门类Org.java impo ... -
CUDR_Fetch 和 Cascade
2012-10-05 16:05 4682CUDR_Fetch 和 Cascade 1.Fetch ... -
OneToOne 、OneToMany 、 ManyToMany
2012-10-05 10:31 3460OneToOne OneToMany ManyToMa ... -
对象的几种状态
2012-10-04 14:10 1358对象的几种状态 1.Transient 刚new一个 ... -
load 和 get的区别
2012-10-04 11:49 1175session加载数据库数据时,load 和 get 1. ... -
Hibernate 注解和配置文件由ORM框架连接库
2012-10-02 12:30 4145Hibernate 注解和配置文件由ORM框架连接库 xm ... -
Hibernate 实现原理
2012-09-12 23:20 4109整体流程 1:通过configuration来读cfg.xml ...
相关推荐
分布式ID生成,主键生成,Java实现的snowflake算法
主要描述hibernate在Annotation情况下的主键生成策略
http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码
gateway+sleuth+docker+单点登陆+全局ID生成策略
生成全局ID的方法很多, 这里记录下一种简单的方案: 利用mysql的自增id生成全局唯一ID. 1. 创建一张只需要两个字段的表: CREATE TABLE `guid` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `stub` char(1...
mybatis 自定义生成 entity/dao/mapper.xml 文件
分布式ID生成,主键生成策略,snowflake算法,采用java实现。
1.自动生成id策略. 2.当多线程进入java类,自动生成id.生成规则,根据毫秒然后+3个随机数.
关于MySQL InnoDB介导的大规模服务中的ID生成策略 介绍 在此页面上,在由MySQL InnoDB介导的大规模服务中,要考虑的插入性能问题,使用随着ID生成策略逐渐增加的64位(8字节)整数值的方法以及该方法在避免问题的...
第一种单字段主键类型,看上去简单,无非就是一个id字段呗,实际上这个主键字段在JPA,还有任何的ORM框架中都是有很多种生成策略的。 一般是如下4种: 1. AUTO:自动自增生成 2. TABLE:自定义表生成器 3. Identity...
设置Id生成策略 其中-包名相关配置:1.设置生成的包名,与代码所在位置不冲突,二者叠加组成完整路径 2.设置实体类包名 3.设置数据层包名 其中-策略配置:1.设置当前参与生成的表名,参数为可变参数 2.设置数据库表...
系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个ID生成的策略。
一个由anjularjs+bootstrap+springMVC搭建的免费开源的API接口、文档... 修改ID生成策略:id按时间升序生成,加快索引创建 7. 添加错误码、数据字典静态化 8. 静态化文章添加分类、分页 9.文章静态化支持手机模式...
snowflake算法是Twitter开源的分布式ID生成算法,结果是一个long类型的ID 。其核心思想:使用41bit作为毫秒数,10bit作为机器的ID(5bit数据中心,5bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每个...
基于TkMyBatis的通用Mapper的二次封装 主要讲Id的生成策略自己掌握 修改了TkMybatis的源码 添加了伪造数据的工具类javafaker
es种一共两种主键生成策略,一个是手动指定和一个是自动生成 1.document的id 1)根据应用情况来说,是否满足是否指定document id的手动指定,一般情况,是从某些其他的系统中,导入一些数据到es时,会采用这种方式,...
技术简介 1、后台主要框架:SpringBoot 2、前台模板引擎:Thymeleaf ...13、主要算法:Twitter雪花算法(ID生成策略)、Bcrypt(密码加密)、JPA排序 项目说明:https://www.educy.top//article/287
主要功能介绍 ...整个系统采用 RESTFul 风格。...9、主要算法:Twitter 雪花算法(ID 生成策略)、Bcrypt(密码加密)、JPA 排序、推荐算法 详细介绍参考:https://blog.csdn.net/newlw/article/details/130740908
## 旅游网是一个基于SpringBoot框架设计的一个毕业设计,主要类似于一个电商系统 ...9、主要算法:Twitter雪花算法(ID生成策略)、Bcrypt(密码加密)、JPA排 前台账号:13512345678 密码:123456