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

results matching ""

    No results matching ""