我使用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语句,创建表