我正在使用 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,
);
过去有没有人设法做到这一点?
谢谢
我发现问题与您的问题相同:
您必须在导入后创建
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 本机创建表。