gpt4 book ai didi

java - hibernate 可以用空格映射 EnumTypes 吗?

转载 作者:搜寻专家 更新时间:2023-11-01 02:56:17 24 4
gpt4 key购买 nike

有一个 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;
}
}

如您所见,我们不能将数据库值直接用作枚举名称,因为它们中有空格。

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

最佳答案

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

修改Status如下:

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;
...
}

关于java - hibernate 可以用空格映射 EnumTypes 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/909949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com