简体   繁体   English

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

[英]Is there a way to generate liquibase changelog from jpa entities with hibernate TypeDef?

I am using jpa-buddy to generate liquibase changelog (sql format) from jpa (hibernate) entities.我正在使用 jpa-buddy 从 jpa (hibernate) 实体生成 liquibase changelog (sql 格式)。 I am using hibernate-types-55 to map java Enum to posgres Enum.我正在使用 hibernate-types-55 将 java 枚举映射到 posgres 枚举。 I do this as follow:我这样做如下:

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

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

The generated DDL with jpa-buddy is:使用 jpa-buddy 生成的 DDL 是:

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

when remove当删除

  @Enumerated(EnumType.STRING)

I get我得到

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

The problem is I can't generate postgres enum type from entity.问题是我无法从实体生成 postgres 枚举类型。

what I am expecting is a generated DDL like:我期待的是生成的 DDL,例如:

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

CREATE TABLE my_entity ( 
    my_enum  my_enum_type, 
);

Has anyone managed to do this in the past?过去有没有人设法做到这一点?

Thank you谢谢

I found the issue same with your issue:我发现问题与您的问题相同:

Java Enums, JPA and Postgres enums - How do I make them work together? Java 枚举、JPA 和 Postgres 枚举——如何让它们协同工作?

You must create MyEnumConverter.class after imoprt Hibernate-core.jar .您必须在 imoprt Hibernate-core.jar之后创建MyEnumConverter.class

In your case, try:在你的情况下,尝试:

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

But I think, using JPA entity isn't good for create table.但我认为,使用 JPA 实体不适合创建表。 You should create table, view, etc,... by SQL native after that you create table if run success SQL statement.如果运行成功的 SQL 语句,您应该创建表、视图等,然后通过 SQL 本机创建表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM