2012-07-18 61 views
6

我有这个枚举在数据库中没有值:商店枚举名称,使用EBean

public enum DocumentTypes { 
    PDF("PDF Document"), JPG("Image files (JPG)"), DOC("Microsoft Word documents"); 

    private final String displayName; 

    DocumentTypes(final String display) { 
     this.displayName = display; 
    } 

    @Override 
    public String toString() { 
     return this.displayName; 
    } 
} 

和模型是这样的:

@Entity 
@Table(name = "documents") 
public class Document extends Model { 
    @Id 
    public Long id; 

    @Constraints.Required 
    @Formats.NonEmpty 
    @Enumerated(EnumType.STRING) 
    @Column(length=20, nullable=false) 
    public DocumentTypes type; 

    @Constraints.Required 
    @Formats.NonEmpty 
    @Column(nullable=false) 
    public String document; 
} 

我在我的控制器使用此枚举匹配:

DynamicForm form = form().bindFromRequest(); 
// ... 
Document doc = new Document(); 
doc.type = DocumentTypes.valueOf(form.field("type").value()); 
doc.save(); 

的问题是,在数据库,它存储为“Microsoft Word文档”,但我宁愿把它保存为DOC。

我该怎么做?

感谢您的帮助!

回答

10

您可以用Anotation EnumMappingEnumValue定义很细颗粒状。这适用于旧版本org.avaje.ebean。

似乎有代码完全重写。在实际版本中有不同的approach

+0

完美! EnumValue非常适合我!谢谢:) – 2012-07-19 12:49:10

+0

两个链接现在都死了,你能添加一些说明这样做呢? – TheChetan 2017-12-20 06:50:20