2013-10-23 35 views
10

我的模型类(个):如何将枚举类型存储为小写字符串?

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

正如你看到上面我重写toString方法,但没有效果。 在数据库中枚举存储为ACTIVEINACTIVE

P.S.我使用休眠jpa

感谢您的帮助!

P.S.S.我问,因为我写REST服务,产生json(在json对象中更好地使用小写,如果我没有错)

+0

您的代码适用于我。 'toString'和'getStatus'都返回小写字符串。你确定在构建json时你没有调用'name()'吗? – Tobber

+0

@Bittenus,我尝试将枚举存储为数据库中的小写字符串。 – eugenes

+0

1.您是否正在使用库来解析枚举,或者是在解析它吗? 2.是否使用'name()'或'toString'解析数据库的枚举? – Tobber

回答

7

编写converter类,用@Converter注解,它实现了javax.persistence.AttributeConverter<YourEnum, String>。有两种方法:

public String convertToDatabaseColumn(YourEnum attribute){..} 
public YourEnum convertToEntityAttribute(String dbData) {..} 

那里你可以应用你的大写/小写逻辑。

稍后,您可以注释您的字段,以使用给定的转换器。

+1

谢谢,肯特。这帮助了我。只是为了完成,因为我不得不搜索它:注释使用转换器的字段是这样的: '@ Colum' '@Convert(converter = YourEnumConverter.class)' – Buka

+0

@Buka right!另外,请注意,如果使用'@ Convert',则应删除'@ Enumerated',否则将忽略转换器 – kiedysktos

0

最佳做法是使用大写的枚举常量。

我看到两个选项

  1. 使用小写枚举(不是一个好的做法)
  2. 更改使用此枚举返回小写的bean的getter方法(方法的getStatus)。 (最好的选择)
+0

在getter方法中,我返回Status枚举。我将返回类型更改为String并将实现更改为返回status.name()。toLowerCase(),但仍然没有效果。对不起 – eugenes

+0

你能复制getter方法的代码吗? –

相关问题