这次我要总结的东西是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;
原文地址:http://blog.csdn.net/fuleidemo/article/details/41959401