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.