初学Hibernate主键生成策略

时间:2022-09-02 21:25:26

  具有业务含义的主键叫自然主键;随机生成,不具备业务含义的字段作为主键,叫代理主键。

在表与POJO类关系映射文件XXX.hbm.xml中,可通过配置id元素下generator节点的class属性指定数据表主键生成策略<generator class="生成策略"></generator>;所谓主键生成策略就是hibernate怎样管理表的主键

主键生成策略:1~4自动增长(1、2、3······),代理主键;5主键为字符串,代理主键;6一般用于自然主键,需要在程序里指定主键值,无法自动生成

  1、increment;代表主键是自动增长的,是由hibernate本身来管理。

          注意:数据库要支持自动增长,如MySQL,SQLserver;Oracle不可以;在多线程情况下,可能会产生主键冲突问题

  2、identity;由底层数据库生成,不由hibernate本身来管理

          注意:数据库支持自动增长,如MySQL,SQLserver;Oracle不可以;   

  3、sequence;标识符生成器利用底层数据库提供的序列来生成标识符

          注意:数据库支持序列,和hibernate程序无关,如Oracle支持,而MySQL就不可以;如Oracle数据库有序列customer_seq,则配置如:<generator class="sequence">customer_seq</generator>

  4、native;标识符依据底层数据库对自动生成标识符的支持能力,来选择使用identity,sequence,或hilo标识符生成器,如MySQL自动选择identity,Oracle自动选择sequence

  5、uuid;主键是字符串的可以用uuid来处理,随机产生32字符串

  6、assigned;一般用于自然主键,无法自动生成,需要程序指定值

  7、复合主键;需要在配置文件里指定复合主键id;如有Person类和Person表,Person表有复合主键firstName和secondName,和age字段

 <hibernate-mapping>
<!-- 类与表关系,name类全名称,table表名 -->
<class name="cn.hjp.domain.Person" table="Person">
<!-- 复合主键 -->
<composite-id>
<key-property name="firstName"></key-property>
<key-property name="secondName"></key-property>
</composite-id>
<property name="age" column="age" type="int"></property>
</class>
</hibernate-mapping>

    注意:Person类必须实现序列化接口Serializable

初学Hibernate主键生成策略的更多相关文章

  1. java框架篇---hibernate主键生成策略

    Hibernate主键生成策略 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL ...

  2. 基于按annotation的hibernate主键生成策略

    基于按annotation的hibernate主键生成策略 博客分类: Hibernate HibernateJavaJPAOracleMySQL  这里讨论代理主键,业务主键(比如说复合键等)这里不 ...

  3. 160727、自定义hibernate主键生成策略生成字符串&plus;数字自增长

    需求:需要自增长注解如MyId0001.MyId0002.MyId0003 实现:实现这个接口org.hibernate.id.IdentifierGenerator 一.MyIdGenerator. ...

  4. jpa基于按annotation的hibernate主键生成策略

    JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar下载 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hib ...

  5. hibernate主键生成策略

    在hibernate中,提供了多种主键生成器(不同的数据库,不同的表结构使用的主键生成策略也不相同),查阅相关资料经过实验总结如下: 1.increment 主键按照数值顺序递增,使用当前实例中最大值 ...

  6. Hibernate主键生成策略(转)

    1.自动增长identity 适用于MySQL.DB2.MS SQL  Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL Server 和 MySQL ...

  7. hibernate主键生成策略(转载)

    http://www.cnblogs.com/kakafra/archive/2012/09/16/2687569.html 1.assigned 主键由外部程序负责生成,在 save() 之前必须指 ...

  8. &lbrack;转&rsqb;hibernate主键生成策略

    1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识使用SQL Server 和 MySQL 的 ...

  9. Hibernate主键生成策略及选择

    1 .increment:适用于short,int,long作为主键,不是使用数据库自动增长机制 这是hibernate中提供的一种增长机制 在程序运行时,先进行查询:select max(id) f ...

随机推荐

  1. app跳转openURL,兼容方法

    - (void)openScheme:(NSString *)scheme {   UIApplication *application = [UIApplication sharedApplicat ...

  2. POJ1915Knight Moves(单向BFS &plus; 双向BFS)

    题目链接 单向bfs就是水题 #include <iostream> #include <cstring> #include <cstdio> #include & ...

  3. 第一次使用Android Studio时你应该知道的一切配置

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  4. JavaScript Coding 模式荟萃

    1.自运行的匿名函数 <script type="text/javascript" src="./js/jquery-1.7.2.js"></ ...

  5. ORACLE升级的一些事

    一.SQL> @?/rdbms/admin/catupgrd.sql 说明:? 代表 ORACLE_HOME,在Linux中可能以 $ORACLE_HOME表示. @ 表示执行脚本 参考: ht ...

  6. CF 500 B&period; New Year Permutation 并查集

    User ainta has a permutation p1, p2, ..., pn. As the New Year is coming, he wants to make his permut ...

  7. &lbrack;Hive - LanguageManual&rsqb; Create&sol;Drop&sol;Grant&sol;Revoke Roles and Privileges &sol; Show Use

    Create/Drop/Grant/Revoke Roles and Privileges Hive Default Authorization - Legacy Mode has informati ...

  8. JqGrid在行中自定义自己的东西

    $.fn.fmatter.actions = function(cellval, opts) { function baseOption(obj) { return { url: obj.url || ...

  9. 关于extjs表单布局的几种方式

    一.用column布局 layout:'column', defaults:{ style:'float:left;margin:4px;', columnWidth: 0.49, msgTarget ...

  10. shell中的数字

    shell中的数字 author :headsen chen date :2017-10-18  15:01:42 个人原创,转载请注明作者,出处,否则依法追究法律责任 1,生成随机数(范围:0-32 ...