postgresql - 有没有办法使用 hibernate TypeDef 从 jpa 实体生成 liquibase 变更日志?

标签 postgresql jpa liquibase hibernate-mapping

我正在使用 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 枚举类型。

我期待的是生成的 DDL,如下所示:

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

CREATE TABLE my_entity ( 
    my_enum  my_enum_type, 
);

过去有人成功做到过吗?

谢谢

最佳答案

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

Java Enums, JPA and Postgres enums - How do I make them work together?

导入 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 native 创建表、 View 等,如果运行成功 SQL 语句,则创建表。

关于postgresql - 有没有办法使用 hibernate TypeDef 从 jpa 实体生成 liquibase 变更日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74364584/

相关文章:

java - 如何过滤 JPQL 查询中的子集合?

mysql - 如何使用sql向该表添加约束?

java - 如何为我的 Traccar 开源项目下载并连接 MySql 以进行 GPS 跟踪

java - 无法使用 JPA 实例化集合持久化器

sql - SELECT 语句以获取带有列标题的分组列的总和

SQL 问题 - fkey 的类型

regex - PostgreSQL 9 : substring with regex to get string between string and pipe

jpa - 如何从 EclipseLink 捕获约束违规异常?

java - Spring Boot中如何划分开发环境和生产环境的Liquibase包结构?

postgresql - 使用 Liquibase 的更新目标