hibernate 关于主键
本文为北京尚学堂hibernate视频的学习笔记
1在xml中定义单个主键生成策略
1.1通过xml
<id name="id" type="long" > <generator class="identity"/> </id>
其中class有多种类型 但实际上我们只需记得四种
native 自动选择数据库
identity 对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。
sequence 在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。
uuid: 使用一个128bit的字符串来标识主键
通过简单的比较 相信大家都明白如果是数字型的主键就选择native 它会设置为对应数据库的自增形式
1.2通过annotation
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) public Long getId() { ... }
其中strategy可以有以下四种形式
- AUTO - 可以是identity column类型,或者sequence类型或者table类型,取决于不同的底层数据库.
- TABLE - 使用表保存id值
- IDENTITY - identity column
- SEQUENCE - sequence
tabel那个说实话 我自己也没有看懂
通过上面四句话 相信大家都知道 该使用那种了吧
2定义联合主键
2.1使用xml
package com.bjsxt.hibernate; public class Student { private StudentPK pk; private int age; private String sex; //省略get/set方法 }
package com.bjsxt.hibernate; public class StudentPK implements java.io.Serializable{ private int id; private String name; @Override public boolean equals(Object o) { if(o instanceof StudentPK) { StudentPK pk = (StudentPK)o; if(this.id == pk.getId() && this.name.equals(pk.getName())) { return true; } } return false; } @Override public int hashCode() { return this.name.hashCode(); } }
每一个学生是以StudentPk作为主键 同时得记住主健类得复写equals和hashcode方法 同时实现serializable接口
<class name="com.bjsxt.hibernate.Student"> <composite-id name="pk" class="com.bjsxt.hibernate.StudentPK"> <key-property name="id"></key-property> <key-property name="name"></key-property> </composite-id> <property name="age" /> <property name="sex" /> <property name="good" type="yes_no"></property> </class>
我想我依然不用说太多了
2.2使用annotation
2.2.1方法一将组件类注解为@Embeddable,并将组件的属性注解为@Id
如上例中 在studentpk类上@embeddable
在student中的getpkStudent方法上@id
2.2.1方法二将组件的属性注解为@EmbeddedId
在上例中只用在student中的getPKStudent()方法上加上@embeddedid
2.2.1方法三将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id
如上例中在student类上加上
@IdClass(StudentPK.class)
在student类中getid和getname两个方法上都加上@id
主要使用的也是第二种方法
hibernate 关于主键的更多相关文章
- hibernate一对一主键双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- hibernate一对一主键单向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- 大家一起撸代码之——Hibernate各种主键生成策略与配置详解
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
- 【hibernate】 hibernate的主键策略
今天使用maven生成一个sping+springMVC+hibernate 的项目,报错如下: 错误提示呢:不能解释这个id的生成策略[uuid.string].就是uuid.string这个hib ...
- Hibernate中主键生成策略
主键生成策略 increment identity sequence native uuid assigned 1) increment 由hibernate完成 主键递增, 原理:select ma ...
- Hibernate各种主键生成策略与配置详解
出自:http://www.cnblogs.com/kakafra/archive/2012/09/16/2687569.html 1.assigned 主键由外部程序负责生成,在 save() 之前 ...
- Hibernate各种主键生成器策略与配置详解(转载)
http://www.cnblogs.com/kakafra/archive/2012/09/16/2687569.html 1.assigned 主键由外部程序负责生成,在 save() 之前必须指 ...
- Hibernate各种主键生成策略与配置详解《转》
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
- Hibernate各种主键生成策略与配置详解【附1--<generator class="foreign">】
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
- hibernate 联合主键生成机制(组合主键XML配置方式)
hibernate 联合主键生成机制(组合主键XML配置方式) 如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...
随机推荐
- 2018年4月更新70多个公司dnc招聘职位
2018年4月更新70多个公司dnc招聘职位 请在本页回复,补充dnc招聘信息.公司案例 dnc简介 dnc = .NET Core.dotnet Core简写 dnc是微软新一代主力编程平台,开源. ...
- 转:Kafka 客户端TimeoutException问题之坑
原文出自:http://www.jianshu.com/p/2db7abddb9e6 各种TimeoutException问题 会抛出org.apache.kafka.common.errors.Ti ...
- 对闭包的理解(closure)
什么是闭包: 当你声明一个局部变量时,这个局部变量有作用域,通常局部变量值只存在于你定义的Block or Function中: function() { var a = 1; console.log ...
- Linux 管理软件
公司的openfire先前运行在windows上的,但由于在windows上openfire内存机制问题,最多只能占用2GB内存,且时间稍微长久一些就会自动挂掉,用户无法登陆和连接,因此迁移到了Cen ...
- leetcode刷题笔记326 3的幂
题目描述: 给出一个整数,写一个函数来确定这个数是不是3的一个幂. 后续挑战:你能不使用循环或者递归完成本题吗? 题目分析: 既然不使用循环或者递归,那我可要抖机灵了 如果某个数n为3的幂 ,则k=l ...
- [self init]
在字典转模型中遇到了这样的代码: #import "HMAppInfo.h" @implementation HMAppInfo - (instancetype)initWithD ...
- Go 语言递归函数
递归,就是在运行的过程中调用自己. 语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recursion() } ...
- 网络七层OSI模型简介
0. 网络七层OSI模型(Open System Interconnection)总览: 1. 应用层 2. 表示层 :表示层的作用是使通信的应用程序能够解释交换数据的含义.这些服务包括数据压缩 ...
- 在web应用中使用Log4j 2
Using Log4j 2 inWeb Applications (在web应用中使用Log4j 2) 来源:http://logging.apache.org/log4j/2.x/manual/we ...
- 衣带渐宽终不悔,为伊消得人憔悴--DbHelper增强版
核心理念 如何使用 测试实例 数据库内详细数据信息 测试代码 数据库连接池测试 测试集 延伸 相关下载链接 前几日,写了一篇关于一个 轻量级数据持久化的框架的博客(点击浏览: http://blog. ...