Zuordnung von Enum zu String im Ruhezustand

91

Ich habe ein Modell für den Ruhezustand der Kategorie:

@Entity
@Table(name = "category")
public class Category {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id")
    private long id;

    @Column(name = "type")
    private String type;

die ein Typzeichenfolgenfeld haben. Außerdem habe ich eine Java-Enumeration, die einen Typ einer Kategorie darstellt:

public enum CategoryType {
    INCOME, OUTCOME;
}

was ich anstelle des String-Typs verwenden möchte. Die SQL akzeptiert zwei unterschiedliche Werte im Parameter varchar: entweder CategoryIncomeoder CategoryOutcome. Ich möchte, dass die Category-Modellklasse eine Enum-Variable akzeptiert - und sie irgendwie der Zeichenfolge zuordnet, wenn der Ruhezustand danach fragt.

Ist es möglich?

Ducin
quelle

Antworten:

181

Ja ist möglich Es sollte sein:

@Enumerated(EnumType.STRING)
@Column(name = "category_type")
private CategoryType categoryType;
dcernahoschi
quelle
14
Sie können sogar noch weiter gehen und jetzt, da JPA 2.1 veröffentlicht wird,@Converter(autoApply = true) public class CategoryTypeConverter implements javax.persistence.AttributeConverter <CategoryType, String>
Membersound
6
Für alle, die das gleiche Problem haben könnten ..: Ich musste diese Anmerkung anstelle des Feldes in meine Getter-Methode einfügen : @Enumerated(EnumType.STRING) public CategoryType getCategoryType() { return this.categoryType; }.
ZeroOne
Ich war im hibernate.ddl-auto=updateModus und musste meine Tabelle löschen und den Ruhezustand erneut erstellen lassen, um meine Aufzählung von int in varchar zu konvertieren. Hoffentlich hilft es jemandem mit ähnlichen Problemen.
Arashsoft
Siehe stackoverflow.com/questions/44864675/…, wenn Ihr Aufzählungswert trotz aufgezählter Annotation als Ordnungszahl geschrieben wird.
Metamaker
Ich lege es nicht auf den Getter. Das Einfügen in die Variablendeklaration funktioniert einwandfrei, was für Lombok mit @Data usw. gut ist. Was ist, wenn ich dies auf alle Enums anwenden möchte, ohne jede zu kommentieren?
Andrew