HeD*_*ges 5 java hibernate jpa
有一个休眠映射遗留数据库我想使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我们不能将数据库值直接用作枚举名称,因为其中有空格。
我想知道是否可以使用枚举来实现此目的?
查看hibernate.orgGenericEnumUserType中的描述(在“灵活解决方案”下)
修改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
}
}
Run Code Online (Sandbox Code Playgroud)
@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;
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2479 次 |
| 最近记录: |