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.