主键是干什么的?
这次我要总结的东西是HIbernate的主键生成策略,那么我们就要研究一下,什么是主键?为什么要研究这个东西?Hibernate在处理数据上如何处理主键。
带着以上的问题我们来研究主键到有什么作用。首先数据在存储在数据库的表中,我们要把数据查询出来,但是当数据量多到一定程度的时候,我们发现一
个问题,就是查找出满足条件的数据好慢哦,慢的我们是不是很闹心,那就对了,因为没有主键,还有,有时候想找唯一一条记录,可是满足条件的数据有
上万条根本没法唯一识别,怎么办,所以,主键起到了以上两个作用,索引和唯一。Hibernate为了实现以上的功能,给出了HIbernate的解决方案。
主键有哪些类型
在日常的开发过程中,数据库主键通常有两种情况,一种是单一字段组件,另一种是多字段联合起来实现主键(也叫联合主键)。
HIbernate是如何实现主键的生成策略
一,唯一主键
@Id
@SequenceGenerator(name = "自定义序列名", sequenceName = "数据库中序列名")
@GeneratedValue(generator = "自定义序列名", strategy = GenerationType.SEQUENCE)
@Column(name = "id")
二,联合主键
将联合主键对应的列放在一个单独的类中,并且该类实现序列化。
联合主键类的几点要求:
1,实现序列化
2,字段为主键字段(多个组合)
3,使用@Column标注
实体类在主键字段上标注@Id注解,同时在实体类上使用@IdClass(主键类.class)
举例如下:
主键类:
public class CustReportPKBean implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "cust_verndor")
private String cust_verndor;
@Column(name = "item_id")
private String item_id;
public String getCust_verndor() {
return cust_verndor;
}
public void setCust_verndor(String cust_verndor) {
this.cust_verndor = cust_verndor;
}
public String getItem_id() {
return item_id;
}
public void setItem_id(String item_id) {
this.item_id = item_id;
}
}
实体类:
@Entity
@IdClass(CustReportPKBean.class)
@Table(name = "CUST_REPORT")
public class CustReportBean {
@Id
private String cust_verndor;
@Id
private String item_id;
@Column(name = "item_num")
private int item_num;
@Column(name = "item_count")
private int item_count;
@Column(name = "his_date")
private String his_date;
@Column(name = "create_person")
private String create_person;
以上是本次使用联合主键的一点总结,以后还会完善。