hibernate主键
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于hibernate主键内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在hibernate主键相关知识领域提供全面立体的资料补充。同时还包含 h6、hack、hadoop 的知识内容,欢迎查阅!
hibernate主键相关知识
-
理解JPA注解@GeneratedValue一、JPA通用策略生成器通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id,其生成规则由@GeneratedValue设定的.这里的@id和@GeneratedValue都是JPA的标准用法,JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出.Target({METHOD,FIELD}) @Retention(RUNTIME) public @interface GeneratedValue{ GenerationType strategy() d
-
Hibernate第二天 实现增删改查 一级缓冲等等Hibernate_day02 1 实体类编写规则 2 hibernate主键生成策略 3 实体类操作 (1)crud操作 (2)实体类对象状态 4 hibernate的一级缓存 5 hibernate的事务操作 (1)事务代码规则写法 6 hibernate其他的api(查询) 实体类编写规则 1 实体类有无参数构造 2 实体类属性私有的 3 私有的属性通过公开的set和get方法操作 4 hibernate要求实体类有一个属性作为唯一值 (1)一般使用id作为唯一值 5 hibernate建议 (1)如果定义属性,属性类型建议不使用基本数据类型,使用
-
关于Hibernate的oracle主键id生成策略uuid、native和sequence 1.uuid是产生一个32位的字符串,所以在数据库主键字段的大小上必须要大于等于32位。另外如果之前在库表设置了触发器和sequence,那么即使是采用uuid主键生成策略,那么hibernate在做插入时,uuid将会失效,而是采用sequence中的值作为主键id。相当于先用uuid做主键id,但是在插入之前又被sequence中的值覆盖掉了。这点必须注意。删除掉该表的触发器即可恢复。 2.native 意味着主键生成机制的实现方式将交给hibernate决定。hibernate 将根据底层数据库适配器dialect 的定义,采用不同数据库特定的主键生成方式。(对于SQLServer和MySQL自动采用自增字段,对于oracle自动采用Sequence生成主键) 注意:在这种情形下,hibernate会默认使用名为hibernate_sequence的序列,如果oracle中没有设置,Console控制台将会产生“Hib
-
Hibernate【映射】知识要点(3)在Hibernate入门篇讲解配置的时候,在generator节点下还有一个属性没有讲解,也就是foreign属性...现在来填坑了.. idCard映射文件 idCart的映射文件主要在于:将主键也映射成外键来使用,这就需要用到foreign属性值了 使用<one-to-one>标签来配置基于主键的映射 <?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="zhongfucheng.on
hibernate主键相关课程
hibernate主键相关教程
- 2. 主键策略 Hibernate 进行数据库操作时,可依靠主键生成器组件更快速、准确地进行一系列操作。这便是主键策略。
- 2.1 主键生成器 主键是关系数据库中的概念,目的是唯一标识表中记录,保证实体数据的完整性。关系数据库中表与表中数据的关系描述需依赖主键实现 ;另有外键概念,所谓外键是在另一张表中对引用表的主键值的引用称呼。主外键关系指在不同的表中通过共同的字段信息建立起表中数据依赖(引用)关系。回到 Hibernate 的世界!先展示一段代码:Student student = new Student(2, "Configuration老二", "男");session.save(student);上面的代码功能:把应用程序中的数据写入到数据库中,没毛病呀!来!没毛病找点毛病出来:实际操作时,要求 Hibernate 把程序中 stuId 属性的值插入到表中同名的 stuId 主键字段中。主键有什么特点?唯一性!回答得对。请问在应用程序中构建数据时,如何确保赋值给 stuId 的值在表中不存在!这就是问题所在。如何解决?使用 Hibernate 主键生成器。所谓主键生成器其作用就是在 Hibernate 向表中插入数据时,负责生成表中数据记录的主键。Hibernate 主键生成器 API 介绍:Hibernate 的主键生成器(generator)都实现了 org.hibernate.id.IdentityGenerator 接口; public class IdentityGenerator extends AbstractPostInsertGenerator { …… }开发者可以遵循这个接口规范提供自己的主键生成方案;Hibernate 内置有较多主键生成器,主键生成器都有自己的实现类,并提供有快捷名称方便在注解或 XML 中引用。常用主键生成器一览:org.hibernate.id.IncrementGenerator(increment):对 long、short 或 int 的数据列生成自动增长主键;org.hibernate.id.IdentityGenerator(identity): 适用于 SQL server,MySql 等支持自动增长列的数据库,适合 long、short 或 int 数据列类型;org.hibernate.id.SequenceGenerator(sequecne):适用 oracle,DB2 等支持 Sequence 的数据库,适合 long、short 或 int 数据列类型;org.hibernate.id.UUIDGenerator(uuid):对字符串列的数据采用 128 - 位 uuid 算法生成唯一的字符串主键;org.hibernate.id.Assigned(assigned):由应用程序指定,也是默认生成策略。默认使用 assigned 生成器。这种方案要求开发者在应用程序中提供自己的主键生成算法:调用保存方法之前,先带着指定的值往数据库中跑一趟,检索是否存在重复,如果有,再试其它值;调用保存方法之前,先检索到表中 stuId 字段值的最大值,返回应用程序后递增 1,用于 stuId 新值。如果多个用户同时向数据中插入数据,这种方案会出问题,不适合并发操作环境。使用 assigned 生成器除非有一个很完美的解决方案,否则建议只用于学习或测试环境。本课程使用的是 Mysql 数据库,最佳选择 identity 生成器,主键值交给数据库的自动增长列自动生成。
- 3.1 什么是复合主键 关系数据库中,主键可指定一个字段实现,也可指定多个字段实现,这样的主键叫复合主键。从数据库表设计原则分析,尽可能少用复合主键,但并不排除需要使用的场景。对使用 Hibernate 的开发者而言,将面对一个新问题:在应用程序中,如何映射表中的复合主键?应用程序中,复合主键映射方案有三:将嵌入类注解为 @Embeddable,并将实体类的属性注解为 @Id;将实体类的属性注解为 @EmbeddedId;将实体类注解为 @IdClass,并将该实体类所有属于主键的属性都注解为 @Id先分清楚两个概念:实体类:使用 @entity 注解的类;嵌入类:使用 @Embeddable 注解的类;
- 3. Hibernate 的主配置文件 聊回到 Hibernate,Hibernate 是一个框架,框架只是一个半成品应用程序。需要使用 Hibernate 完成一次具体的数据库数据操作时,需要开发者的组件和 Hibernate 的组件通力合作。对于 Hibernate 来说,如何知道开发者具体使用什么样的数据库、什么样的持久化对象……开发者只需要把这些信息写入到配置文件中,Hibernate 就能通过读取配置信息了解开发者的心意。所以说主配置文件在 Hibernate 和 开发者之间充当了桥梁的作用,是内外交流的通道。Tips: 通过配置文件,在开发者和 Hibernate 之间进行信息传递,让 Hibernate 能从容面对不同开发者的需求。你有没有觉得 Hibernate 把开闭原则用得很好呢!知道了配置文件的作用,现在是时候了解 Hibernate 中的主配置文件能具体传递什么信息了。
- 2.3 主键生成器 使用注解 @GeneratedValue 指定生成器类型后,Hibernate 一般情况下会自动创建对应的生成器对象,如前面指定类型为 IDENTITY,则创建生成 org.hibernate.id.IdentityGenerator 对象。如果需要个性化定制生成器对象,则需要显示指定生成器对象,如为 Oracle 数据库指定主键生成器时,则配置可如下:XML 映射方式:<id name="stuId" type="Integer" column="stuId"> <generator class="sequence"> <param name="sequence">mySeq</param> </generator></id>注解映射方式:@Id@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="mySeqIdGen")@SequenceGenerator(name="mySeqIdGen",sequenceName="mySeq")public Integer getStuId() { return stuId;}@SequenceGenerator 注解显示指明使用 org.hibernate.id.SequenceGenerator 生成器对象,并指定使用数据库中的命名为 mySeq 的序列化器。其它主键生成器的使用本文不再复述,抛砖引玉,学习者可自行深入!
- 2.2 使用主键生成器重构代码 在 Student 类的标识属性(stuId)上标注如下注解; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public Integer getStuId() { return stuId; }简单得难以置信!空灵而干净!!使用 @GeneratedValue 注解确定主键生成器类型。GenerationType 是一个枚举类型,有如下几个选择:AUTO:Hibernate 区分数据库系统,自动选择最佳策略;IDENTITY: 适合具有自动增长类型的数据库,如 MySql……SEQUENCE: 适合如 Oracle 类型数据库;TABLE: 使用 Hibernate 提供的 TableGenerator 生成器,不常用。为了更好观察生成的新数据,重建数据库中的表。主配置文件中修改或添加如下配置信息; <property name="hbm2ddl.auto">create</property>执行插入数据实例; // 打开事务 try{ transaction = session.beginTransaction(); // 添加一条学生信息,此处没有指定学生编号 Student student = new Student("Hibernate 01", "男"); session.save(student); transaction.commit(); } catch(Exception e) { transaction.rollback(); } finally { session.close(); }进入 Mysql 系统查看,表结构中 stuId 自动设为主键,且为自动递增;查看表中数据,主键值自动生成;试着多加几条数据,别忘记修改如下配置信息。 <property name="hbm2ddl.auto">update</property>大功告成!!
hibernate主键相关搜索
-
h1
h6
hack
hadoop
halt
hana
handler
hanging
hash
hashtable
haskell
hatch
hbase
hbuilder
hdfs
head
header
header php
headers
headerstyle