Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate可以用空格映射枚举类型吗?_Java_Hibernate_Jpa - Fatal编程技术网

Java hibernate可以用空格映射枚举类型吗?

Java hibernate可以用空格映射枚举类型吗?,java,hibernate,jpa,Java,Hibernate,Jpa,通过hibernate映射遗留数据库,我想使用EnumTypes将包含带空格的字符串常量的某些列映射到某个Enum类 映射: @Entity @Table(name = "OPERATOR") public class Operator { @Id @Column(name = "ID") private Long id; ... @Enumerated(EnumType.STRING) @Column(name = "STATUS")

通过hibernate映射遗留数据库,我想使用EnumTypes将包含带空格的字符串常量的某些列映射到某个Enum类

映射:

@Entity
@Table(name = "OPERATOR")
public class Operator {   
    @Id
    @Column(name = "ID")
    private Long id;
    ...

    @Enumerated(EnumType.STRING)
    @Column(name = "STATUS")
    private Status status;
    ...
}

public enum Status {
    OPERATOR_CREATED("Operator created"),
    ACTIVE("Active"),
    END_DATED("End dated");

    private String name;

    Status(String status) {
       name = status;
    }
}
正如您所看到的,我们不能将数据库值直接作为枚举名使用,因为其中有空格


我想知道是否可以为此使用枚举?

查看(在“灵活解决方案”下)中描述的
GenericEnumUserType

修改
状态
,如下所示:

public enum Status 
{
    OPERATOR_CREATED("Operator created"),
    ACTIVE("Active"),
    END_DATED("End dated");

    private String name;

    Status(String status) 
    {
       name = status;
    }

    public String toString()
    {
       return name;
    }

    public Status fromString( String value )
    {
        if ( "Operator created".equals( value ) 
        {
            return OPERATOR_CREATED;
        }
        //etc
    }
}
现在在实体上使用
@Type
注释

@Entity
@Table(name = "OPERATOR")
public class Operator {   
    @Id
    @Column(name = "ID")
    private Long id;
    ...

    @Column(name = "STATUS", columnDefinition = "VARCHAR(31)", nullable = false )
    @Type( type = "my.package.GenericEnumUserType",
           parameters = {
        @Parameter( name = "enumClass", value =  "my.package.Status" ),
        @Parameter( name = "identifierMethod", value = "toString" ),
        @Parameter( name = "valueOfMethod", value = "fromString" ) } )
    private Status status;
    ...
}

我遇到了同样的情况,尝试使用
replace
函数,如下所示:

@ColumnTransformer(read = "replace(status::varchar, ' ', '')", write = "replace(?, 'End', 'End ')::status")
你有下划线,所以需要修改一下

regexp\u replace
如果有多个带有空格的枚举值,也很方便


注意,我使用的是postgresql 9.6

,您还可以考虑使用ReversibleEnum()在Status上优雅地实现fromString()方法。