eug*_*nes 13 java enums persistence hibernate jpa
我的模特课(作品):
public class User ... {
@Enumerated(STRING)
private Status status;
...
public enum Status {
ACTIVE,
INACTIVE;
@Override
public String toString() {
return this.name().toLowerCase();
}
}
...
public String getStatus() {
return status.name().toLowerCase();
}
public void setStatus(Status status) {
this.status = status;
}
}
Run Code Online (Sandbox Code Playgroud)
如上所示,我重写了toString方法,但没有效果.枚举存储在数据库中为ACTIVE
或INACTIVE
.
PS我使用hibernate jpa
感谢帮助!
PSS我问,因为我编写生成json的REST服务(在json对象中更好地使用小写,如果我没有错误)
写一个converter
带有注释的类@Converter
,它实现了javax.persistence.AttributeConverter<YourEnum, String>
.有两种方法:
public String convertToDatabaseColumn(YourEnum attribute){..}
public YourEnum convertToEntityAttribute(String dbData) {..}
Run Code Online (Sandbox Code Playgroud)
在那里你可以应用你的大/小写逻辑.
稍后您可以注释您的字段,以便使用给定的转换器.
这是一个快速实用的使用示例(在 JPA 2.1 中引入)AttributeConverter
更新您的枚举类:
public enum Status {
ACTIVE,
INACTIVE;
public String toDbValue() {
return this.name().toLowerCase();
}
public static Status from(String status) {
// Note: error if null, error if not "ACTIVE" nor "INACTIVE"
return Status.valueOf(status.toUpperCase());
}
}
Run Code Online (Sandbox Code Playgroud)
创建属性转换器:
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class StatusConverter implements AttributeConverter<Status, String> {
@Override
public String convertToDatabaseColumn(Status status) {
return status.toDbValue();
}
@Override
public Status convertToEntityAttribute(String dbData) {
return Status.from(dbData);
}
}
Run Code Online (Sandbox Code Playgroud)
如果autoApply
设置为true,则不需要将javax.persistence.Convert
注释添加到所有要转换的属性中。否则,应用转换器:
import javax.persistence.Convert;
import javax.persistence.Entity;
@Entity
public class User {
@Convert(converter = StatusConverter.class)
@Enumerated(STRING)
private Status status;
// ... other fields, constructor(s), standard accessors
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9386 次 |
最近记录: |