JHipster默认使用long作为id的数据类型,并且自增。id自增本身有局限性,尤其是在集群环境下,容易造成逐渐冲突
JHipster作者jdubois认为生成uuid会消耗更多资源,而且他还认为这会造成业务相等的两个对象,hashCode会不同
此处引用cbornet的方案
@Column(name="__UUID__", unique=true, nullable=false, updatable=false, length = 36)
private String uuid = java.util.UUID.randomUUID().toString();
稍作改动
@Id
@Column(name="id", unique=true, nullable=false, updatable=false, length = 36)
private String id = java.util.UUID.randomUUID().toString();
注意使用该方法会导致两个相同的对象的hashCode不一样 , 可以改成由ORM框架生成uuid,例如此处使用的是Hibernate
@Id
@GeneratedValue(generator="uuid2")
@GenericGenerator(name="uuid2",strategy="uuid2")
@Column(name="id", unique=true, nullable=false, updatable=false, length = 36)
private String id ;
注意 如果用uuid
会报Using org.hibernate.id.UUIDHexGenerator which does not generate IETF RFC 4122 compliant UUID values;
警告信息,详见 Various additional
然后修改实体类中的id属性的setter和getter的类型。
然后修改hashCode()和equals()方法
然后修改\src\main\resources\config\liquibase\changelog\--某个实体类--.xml
<createTable tableName="表名">
<column name="id" type="varchar(36)">
<constraints primaryKey="true" nullable="false"/>
</column>
</createTable>
运行
mvn clean
mvnw