Hibernate-4种常用主键生成策略 以及1对1关联
2015-08-27 08:23
507 查看
Id选择
uuid(32为的字符串) native(本地的数据库) sequence (序列,oracle会自动帮我们生成序列) identity(自动增加)
@Id -----表示这个是主键
@GeneratValue ----设置id的生成策略 四种(默认是native)Auto(相当于native) identity sequence table
里面有两个属性
策略:strategy=GenerationType.IDENTITY 自动增加(mysql数据库,或者是sql server)
strategy=GenerationType.SEQUENCE 序列 (oracle) 可以指定sequence
在类头+ @SequenceGenerator(name="generator",sequenceName="sequenct") ----name指的是生成器的名字
----sequenceName数据库里面的sequen的名字
例子
如果没有指定sequence,那么全部都用一个,如果有指定,那就用指定的哪个
@strategy=GenerationType.TABLE
@TableGenerator 用表来生成主键(不常用)
name 生成器的名字
table 表名
pkColumName=“key” 字段名叫key
valueColunmName= “value” 字段名叫value
pkColunmValue =“teacher” 在key里面添加一个数据叫teacher
allocationsize=1 在value对应的teacher值每次自动增加1
hibernate取的时候是现在key里面找个字段是key里面是teacher的这一条数据对应的value取出来并且自增1
strategy=GenerationType.NATIVE 本地,默认是native(hibernate会根据你使用的数据库帮你选择)
一对一
主键关联,外键关联,中间表(很少用)
主键关联:2个表共用同一个主键
外键关联:在2个表中其中一个表中加外键
中间表:关联表,里面存两张表的主键
1对1 外键关联
@OneToOne 对应关系
@JoinColumn 连接的字段
@JoinColumn(name="xxid")
如果是一对一 双向,hibernate会帮你生成2个外键
@OneToOne(mappedBy="a") 告诉hibernate 在a和b中,在b中已经做了映射了,
就是说在数据库中b表有外键,a表不会有外键
public class A{
private int id
@ OneToOne
private B b
}
public class B{
private int id
@ OneToOne(mappedBy="b") //告诉hibernate 外键已经由A中的b对象实现了
private A a
}
这时候如果用hibernate生成表的话 外键就只会存在a表中
1对1 主键关联
public class A{
private int id
@ OneToOne
private B b
}
public class B{
private int id
@ OneToOne(mappedBy="b")
@PrimaryKeyJoinColumn(name=“b”)
private A a
}
uuid(32为的字符串) native(本地的数据库) sequence (序列,oracle会自动帮我们生成序列) identity(自动增加)
@Id -----表示这个是主键
@GeneratValue ----设置id的生成策略 四种(默认是native)Auto(相当于native) identity sequence table
里面有两个属性
策略:strategy=GenerationType.IDENTITY 自动增加(mysql数据库,或者是sql server)
strategy=GenerationType.SEQUENCE 序列 (oracle) 可以指定sequence
在类头+ @SequenceGenerator(name="generator",sequenceName="sequenct") ----name指的是生成器的名字
----sequenceName数据库里面的sequen的名字
例子
如果没有指定sequence,那么全部都用一个,如果有指定,那就用指定的哪个
@strategy=GenerationType.TABLE
@TableGenerator 用表来生成主键(不常用)
name 生成器的名字
table 表名
pkColumName=“key” 字段名叫key
valueColunmName= “value” 字段名叫value
pkColunmValue =“teacher” 在key里面添加一个数据叫teacher
allocationsize=1 在value对应的teacher值每次自动增加1
hibernate取的时候是现在key里面找个字段是key里面是teacher的这一条数据对应的value取出来并且自增1
strategy=GenerationType.NATIVE 本地,默认是native(hibernate会根据你使用的数据库帮你选择)
一对一
主键关联,外键关联,中间表(很少用)
主键关联:2个表共用同一个主键
外键关联:在2个表中其中一个表中加外键
中间表:关联表,里面存两张表的主键
1对1 外键关联
@OneToOne 对应关系
@JoinColumn 连接的字段
@JoinColumn(name="xxid")
如果是一对一 双向,hibernate会帮你生成2个外键
@OneToOne(mappedBy="a") 告诉hibernate 在a和b中,在b中已经做了映射了,
就是说在数据库中b表有外键,a表不会有外键
public class A{
private int id
@ OneToOne
private B b
}
public class B{
private int id
@ OneToOne(mappedBy="b") //告诉hibernate 外键已经由A中的b对象实现了
private A a
}
这时候如果用hibernate生成表的话 外键就只会存在a表中
1对1 主键关联
public class A{
private int id
@ OneToOne
private B b
}
public class B{
private int id
@ OneToOne(mappedBy="b")
@PrimaryKeyJoinColumn(name=“b”)
private A a
}
相关文章推荐
- Win10 10240用户获得Edge浏览器内置的企业模式怎么使用?
- linux内核编译
- 安装git-review
- SAP移动类型103解析
- Java中Exception的种类
- 四塔问题
- [codility] Lesson 2 Counting Elements
- MySQL在windows和linux下的表名大小写问题
- 【找规律(其实很神的东西)】【TJOI 2015】【bzoj 4001】概率论
- test
- 优化基于FPGA的深度卷积神经网络的加速器设计
- linux下添加静态路由
- Add Digits
- 利用httpd对tomcat进行负载均衡配置
- sql通用分页自定义表条件存储过程
- TCP通信的三次握手和四次撒手的详细流程
- 实战 Jetty
- LeetCode OJ 06 ZigZag Conversions
- Win10补丁神神秘秘不提供更新内容 N多用户抓狂
- 算法 链表相邻元素翻转