2012-07-18 17 views
6

tengo esta enumeración:tienda nombre de enumeración, no el valor en la base de datos utilizando 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; 
    } 
} 

Y un modelo como este:

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

que coinciden con la enumeración usando esto en mi controlador:

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

El problema es que en la base de datos, se almacena como "documentos de Microsoft Word", pero preferiría almacenarlo como DOC.

¿Cómo puedo hacer eso?

Gracias por su ayuda!

Respuesta

10

Puede definirlo muy fino granular con la Anotación EnumMapping o EnumValue. Esto funciona con la versión anterior org.avaje.ebean.

Parece que hubo una reescritura completa del código. En la versión actual hay un approach diferente.

+0

¡Perfecto! ¡EnumValue funcionó muy bien para mí! Gracias :) –

+0

Ambos enlaces están muertos ahora, ¿pueden agregar alguna descripción a esto? – TheChetan

Cuestiones relacionadas