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
}