有没有一种方法可以使用 hibernate TypeDef 从 jpa 实体生成 liquibase 变更日志?

问题描述 投票:0回答:1

我正在使用 jpa-buddy 从 jpa(hibernate)实体生成 liquibase changelog(sql 格式)。 我正在使用 hibernate-types-55 将 java 枚举映射到 posgres 枚举。我这样做如下:

@Entity
@TypeDef(
        name = "pgsql_enum",
        typeClass = PostgreSQLEnumType.class
)
public class MyEntity {

  @Enumerated(EnumType.STRING)
  @Type(type = "pgsql_enum")
  private MyEnumType myEnum;
}

使用jpa-buddy生成的DDL为:

CREATE TABLE my_entity
(
    my_enum  VARCHAR(255),
);

什么时候删除

  @Enumerated(EnumType.STRING)

我明白了

CREATE TABLE my_entity
(
    my_enum  UNKNOWN__COM.VLADMIHALCEA.HIBERNATE.TYPE.BASIC.POSTGRESQLENUMTYPE,
)

问题是我无法从实体生成 postgres 枚举类型。

我期待的是生成的 DDL,例如:

create type my_enum_type as enum ('ENUM1', 'ENUM2', 'ENUM3');

CREATE TABLE my_entity ( 
    my_enum  my_enum_type, 
);

过去有没有人设法做到这一点?

谢谢

postgresql jpa liquibase hibernate-mapping
1个回答
2
投票

我发现问题与您的问题相同:

Java 枚举、JPA 和 Postgres 枚举——如何让它们协同工作?

您必须在导入后创建

MyEnumConverter.class
Hibernate-core.jar
.

在你的情况下,尝试:

@TypeDef(name="myEnumConverter", typeClass=MyEnumConverter.class)
public @Entity class MyEntity {
    
    public static enum Mood {ENUM1, ENUM2, ENUM3}
    
    @Type(type="myEnumConverter") MyEnumType myEnum;
}

但我认为,使用 JPA 实体不利于创建表。
如果运行成功的 SQL 语句,您应该创建表、视图等,然后通过 SQL 本机创建表。

© www.soinside.com 2019 - 2024. All rights reserved.