हाइबरनेट में स्ट्रिंग को मैपिंग एनम


92

मुझे श्रेणी हाइबरनेट मॉडल मिला है:

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

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

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

जिसके पास एक प्रकार का स्ट्रिंग फ़ील्ड है। इसके अलावा मुझे एक जावा एनम मिला है जो एक प्रकार की श्रेणी का प्रतिनिधित्व करता है:

public enum CategoryType {
    INCOME, OUTCOME;
}

जिसे मैं स्ट्रिंग प्रकार के बजाय उपयोग करना चाहूंगा। या तो: एसक्यूएल varchar पैरामीटर में दो अलग-अलग मान स्वीकार करता है CategoryIncomeया CategoryOutcome। मैं श्रेणी मॉडल वर्ग को एक एनम चर स्वीकार करना चाहता हूं - और इसे किसी भी तरह से स्ट्रिंग में मैप करना चाहिए जब भी हाइबरनेट इसके लिए पूछता है।

क्या यह संभव है?

जवाबों:


182

हाँ, संभव है। यह होना चाहिए:

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

15
आप आगे भी जा सकते हैं और अब, जैसा कि जेपीए 2.1 जारी किया गया है, का उपयोग करें@Converter(autoApply = true) public class CategoryTypeConverter implements javax.persistence.AttributeConverter <CategoryType, String>
सदस्य

6
किसी के लिए भी, जो एक ही समस्या हो सकती है ..: मुझे इस एनोटेशन को फ़ील्ड के बजाय अपने गेट्टर मेथड में डालना होगा, जैसे @Enumerated(EnumType.STRING) public CategoryType getCategoryType() { return this.categoryType; }:।
ज़ीरोने

मैं hibernate.ddl-auto=updateमोड में था और मुझे अपनी तालिका को फिर से बनाने के लिए अपनी तालिका को छोड़ना पड़ा और अपनी एनम को अंतर से varchar में बदलने के लिए फिर से बनाना पड़ा। उम्मीद है कि यह किसी को इसी तरह के मुद्दे के साथ मदद करता है।
21

Stackoverflow.com/questions/44864675/… देखें, यदि एन्यूमरेट एनोटेशन के बावजूद आपके एन्यूमरेशन वैल्यू को ऑर्डिनल लिखा जा रहा है।
मेटेमेकर

मैं इसे पाने वाले पर नहीं डालता। इसे चर घोषणा पर रखना ठीक काम करता है, जो @Data, आदि का उपयोग करते हुए लोमबोक के लिए अच्छा है, क्या होगा अगर मैं हर एक को एनोटेट किए बिना सभी Enums पर इसे लागू करना चाहता हूं?
एंड्रयू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.