利用hibernate reverse engineering直接生成实体类时,主键的自增选项设置,id generator 选项要选择identity而不是
虽然这两个都是自增,但是是有区别的
identity:由底层数据库生成标识符identity是由数据库自己生成的,但这个主键必须设置为自增长,前提条件是低层数据库支持自动增长字段类型
increment:由hibernate管理主键,自动以递增的方式生成标识符,每次增量为1其在每次插入前取得一个当前最大的id+1作为主键,该主键必须为Integer类型
所以如果设置成increment,在项目并发量比较大的时候,方法里存在长事务的时候,容易造成主键冲突错误,如下图描述:
org.hibernate.exception.ConstraintViolationException: Duplicate entry '3976' for key 'PRIMARY'
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:74)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExcep