Hibernate主键生成策略总结

 主键是干什么的?

这次我要总结的东西是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;

以上是本次使用联合主键的一点总结,以后还会完善。





郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。