database - Liquibase生成bigint ID而不是varchar

我只是想在postgresql上尝试dropwizard和hibernate的Liquibase,所有的最新版本,但是我遇到了一个障碍。我打算使用hibernate的uuid生成器来生成类id,它生成一个字符串pk。我指定要在表中使用名为varchar(32)id字段,但liquidbase生成了bigint字段。然而有趣的是,这两个表有不同的列:portfolio.id有序列portfolio_id_seq,而stock没有序列。
是我做错了什么,还是这只是Liquibase的ID列的一些奇怪特性?我应该使用bigints吗?代码如下:
migrations.xml文件:

<changeSet id="1" author="orlade">
    <createTable tableName="stock">
        <column name="id" type="varchar(255)">
            <constraints primaryKey="true" nullable="false" />
        </column>
        <column name="name" type="varchar(255)">
            <constraints nullable="false" />
        </column>
        <column name="symbol" type="varchar(255)">
            <constraints nullable="false" />
        </column>
        <column name="description" type="varchar(255)" />
    </createTable>

    <createTable tableName="portfolio">
        <column name="id" type="varchar(255)">
            <constraints primaryKey="true" nullable="false" />
        </column>
        <column name="name" type="varchar(255)">
            <constraints nullable="false" />
        </column>
        <column name="description" type="varchar(255)" />
    </createTable>
</changeSet>

公文包.java:
@Entity
@Table(name = "portfolio")
public class Portfolio {
  @Id
  @GeneratedValue(generator = "system-uuid")
  @GenericGenerator(name = "system-uuid", strategy = "uuid")
  private String id;
}

股票.java:
@Entity
@Table(name = "stock")
public class Stock {
  @Id
  @GeneratedValue(generator = "system-uuid")
  @GenericGenerator(name = "system-uuid", strategy = "uuid")
  private String id;
}

最佳答案

因此,虽然我找不到有效的liquidbase类型列表,但结果是UUID是一个,所以我使用了它,并将java类型更改为java.util.UUID。这似乎足以让liquidbase创建uuid类型的列,但随后我在java中开始出现错误,即无法将字符串写入uuid或其他类型。
结果(或者至少是a)解决方案是使用@type注释指定您希望hibernate在写入数据库之前将值转换为的类型。仅仅说它是一个java.util.UUID似乎还不够。以下设置有效:

@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Type(type = "pg-uuid")
private UUID id;

uuid2策略可以 generate UUID, String or byte[16] values,默认情况下,它似乎试图使用 bytea类型写入postgres。指定类型修复了这个问题(根据 Postgresql UUID supported by Hibernate?),我也不知道为什么它不是默认值。