2013-01-12 48 views
5

मैं अपने मॉडल में (खोजा) स्थानीयकरण उपयोग करना चाहते हैं, और मैं निम्नलिखित मॉडल के साथ आया था: श्रेणियों जो एक को शामिल करने के लिए क्वेरी करने के लिएHQL पर चयन एम्बेडेड नक्शे

@Entity 
public class Category { 
    ... 
    @ElementCollection 
    //key = language code (e.g. 'en') and value = localized label 
    private Map<String, String> name; 
    ... 
} 

क्या मुझे कोई क्या करना चाहते है एक विशेष स्थानीयकरण में caseinsensitive सुई (जैसे के साथ '% एबीसी%' उनके अंग्रेज़ी नाम पर)

मैं की तरह

from Category where name.key = :locale and lower(name.value) like :text 

कुछ कोशिश की, लेकिन उस के साथ एक घ नहीं कर सकते हैं विफल रहता है ereference स्केलर संग्रह तत्व अपवाद।

अब हाइबरनेट डॉकू कहता है, मुझे मूल्यों और चाबियों के लिए तत्व() और इंडेक्स() का उपयोग करना होगा। कुंजी के लिए यह :locale in indices(name) का उपयोग करना आसान होगा, लेकिन फिर मैं इस लोकेल के मूल्य के एक भाग को एक केसिनेंसिव तरीके से कैसे मिलान कर सकता हूं?

और यदि यह मेरे मॉडल के साथ एचक्यूएल के साथ काम करने योग्य नहीं है, तो मैं खोज योग्य स्थानीयकरण कैसे और मॉडल कर सकता हूं?

+0

के बाद @Embeddable समाधान का उपयोग कर रहा है वहाँ एक कारण मैं डाउनवॉट क्यों किया गया था? – Flo

उत्तर

3

मैं अंत में निम्नलिखित समाधान के साथ आया था (वास्तव में मैं बहुत यह भी योजना का उपयोग कर काम करेगा यकीन एम्बेड करने योग्य वस्तु के स्थान पर नक्शे)

@Entity 
public class Category { 
    ... 
    @ElementCollection 
    @CollectionTable(name = "locale_category_name", [email protected](name="id")) 
List<Localization> name; 
    ... 
} 

@Embeddable 
public class Localization { 
    @NotNull 
    public String locale; 
    @NotNull 
    public String label; 
} 

और क्वेरी (में शामिल होने का उपयोग कर ... के साथ .. ।)

from Category c join c.name l with (l.locale = :locale and lower(l.label) like :text) 

संपादित करें: असल में मैं एक मानचित्र के साथ काम करने के लिए इसे प्राप्त करने में असमर्थ था, इसलिए मैं सभी

+0

असल में, मैंने इसे आजमाया, और यह मानचित्र <स्ट्रिंग, स्ट्रिंग> के साथ काम नहीं कर रहा है - मुझे हमेशा स्केलर त्रुटि को रोक नहीं सकता है। मैं कॉलम नाम के रूप में 'कुंजी' और 'मान' का उपयोग करता हूं, लेकिन शायद यह नहीं पता कि यह सही है या नहीं। – Flo

+0

मैंने कुछ अन्य उदाहरण किए और पता चला, अगर मैं 'मानचित्र <स्ट्रिंग, स्ट्रिंग>' का उपयोग करता हूं, तो मेरी क्वेरी होनी चाहिए: 'श्रेणी सी से जहां निम्न (c.name [: locale]) जैसे: text' – Flo