是否有一种方法从jpa实体与hibernate TypeDef生成液化库变更日志?



我使用jpa-buddy从jpa (hibernate)实体生成liquibase变更日志(sql格式)。我使用hibernate-types-55将java Enum映射到posgres Enum。我这样做:

@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 enum类型。

我期望的是一个生成的DDL,如:

create type my_enum_type as enum ('ENUM1', 'ENUM2', 'ENUM3');
CREATE TABLE my_entity ( 
my_enum  my_enum_type, 
);

过去有人这样做过吗?

谢谢

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

Java枚举,JPA和Postgres枚举-我如何使它们一起工作?

导入Hibernate-core.jar后必须创建MyEnumConverter.class

在你的情况下,试试:

@TypeDef(name="myEnumConverter", typeClass=MyEnumConverter.class)
public @Entity class MyEntity {

public static enum Mood {ENUM1, ENUM2, ENUM3}

@Type(type="myEnumConverter") MyEnumType myEnum;
}

但是我认为,使用JPA实体并不适合创建表。
你应该创建表,视图等…如果运行成功SQL语句,创建表

最新更新