Hazırda bekletme modundaki dizeyle eşleme


93

Bir Kategori Hazırda Bekletme modelim var:

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

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

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

bir tür dizesi alanına sahip olan. Ayrıca, bir kategori türünü temsil eden bir Java numaram var:

public enum CategoryType {
    INCOME, OUTCOME;
}

dize türü yerine kullanmak istediğim. SQL, varchar parametresinde iki farklı değeri kabul eder: ya CategoryIncomeveya CategoryOutcome. Kategori modeli sınıfının bir enum değişkenini kabul etmesini ve hazırda bekletme istediği zaman onu bir şekilde dizeye eşlemesini istiyorum.

Mümkün mü?

Yanıtlar:


185

Evet mümkündür. Olmalı:

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

15
Daha da ileri gidebilirsiniz ve şimdi JPA 2.1 yayınlandığında, şunu kullanın@Converter(autoApply = true) public class CategoryTypeConverter implements javax.persistence.AttributeConverter <CategoryType, String>
— 2014

6
Herkes aynı sorun olabilir kim ..: Böyle, alanın yerine benim alıcı yöntemine Bu ek açıklamanın koymak zorunda: @Enumerated(EnumType.STRING) public CategoryType getCategoryType() { return this.categoryType; }.
— ZeroOne

I was hibernate.ddl-auto=updatemodu ve benim masa bırakın ve derin uyku varchar int benim enum dönüştürmek için tekrar oluşturmasına izin gerekiyordu. Umarım benzer sorunu olan birine yardımcı olur.
— Arashsoft

Numaralandırılmış ek açıklamaya rağmen numaralandırma değeriniz sıralı olarak yazılıyorsa stackoverflow.com/questions/44864675/… adresine bakın .
— metamaker

Onu alıcıya koymam. Bunu değişken bildirimine koymak iyi çalışıyor, bu da Lombok için @Data, vb. Kullanmak için iyidir. Ya bunu her birine açıklama eklemeden tüm Enum'lara uygulamak istersem?
— Andrew

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.