Spring中@Table设置索引来保证数据的唯一
2017-11-13 本文已影响0人
Slience无言
实体中有一些熟悉是唯一的,他们不是主键,可能是手机号也可能是身份证号等,这时候我们就可以通过索引来约束这些数据的唯一性
举例,用户身份证号为唯一的,所以我们可以在实体类中这样写
package cm.demo.entity;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Table(name="c_auth", indexes= {@Index(name="identity_index", columnList="_identity", unique=true)})
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Auth {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="_id", nullable=false, columnDefinition="int comment 'id'")
private int id;
@OneToOne(targetEntity=User.class)
@JoinColumn(name="_user_id", columnDefinition="int comment '用户id'", nullable=false)
private User user;
@Column(name="_realname", columnDefinition="varchar(20) comment '真实姓名'", nullable=false)
private String realname;
@Column(name="_identity", columnDefinition="varchar(18) comment '身份证号'", nullable=false)
private String identity;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="_time", nullable=false)
private Date time; //创建时间
public Auth(User user, String realname, String identity, Date time) {
this.user = user;
this.realname = realname;
this.identity = identity;
this.time = time;
}
}
其中
@Table(name="c_auth", indexes= {@Index(name="identity_index", columnList="_identity", unique=true)})
indexes部分就是我们设置索引的地方,@Index是一个具体的索引信息,其中name为索引名,columnList对应数据库的属性名,我这里需要把身份证号设为索引故用“_identity”(身份证),unique为true——不能一样:true(很好理解吧)
由此生成的数据表索引部分这样的
image.png