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?

Antworten:


181

Ja ist möglich Es sollte sein:

@Enumerated(EnumType.STRING)
@Column(name = "category_type")
private CategoryType categoryType;

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.