法1:
数据表中设置了主键(Primary Key),而主键对应的值是不允许重复的。
设置主键自增,已经设置的请忽略;
法2
优化Insert语句,加上ignore关键词即可,意思是如果该主键已存在,则不执行该条sql。如果没有成功添加该数据,接口返回值就为0(@新增0条数据),然后需要再次调用插入接口对该数据进行二次插入。!!!这里提醒接口返回值用void的同学,返回值最好用int(@返回值是有意义的)。
INSERT IGNORE INTO tase1......
法3:
当前id为10000的并没有数据,但是Insert id=10000时还是报这个错!我们需要放弃这个id,直接把该表当前自增数调大,即可:
alter table Table_Name AUTO_INCREMENT=11000;
id=10000的有问题,我直接把自增数调到11000(不要调的太大,因为每条都会有空间的资源浪费),这下不会冲突了
法4:(重点)
1.将主键设置为自动增长。可以在数据库手动将相关表设置ID为自增长
2.手动将表设置为自增长有弊端,建议在annotation里边的POJO类使用注解方式设置自增长。mysql的数据库如图所示设置。
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Entity
@Table(name = "f_user")
@Data
public class FUser implements Serializable {
private static final long serialVersionUID = 8060959602677501490L;
// @Id:声明主键字段
// @Data:构造set get方法
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer uid;
private String uname;
private String utime;
private String upwd;
@Column(insertable = false,updatable = false)
private Integer hid;
private String filePath;
@OneToOne
@JoinColumn(name = "hid",referencedColumnName = "hid")
private FHospital fHospitalDemo;
//@joincolumn 中name的属性对用数据库中的字段addressId,referencedColumn Name属性对应关联表的主键
}