2010-12-01 8 views
5

मैं folowing क्षेत्रों के साथ फिल्म के नाम के साथ एक वर्ग बना दिया है:जावा हाइबरनेट मैपिंग अपवाद! (के लिए प्रकार का निर्धारण नहीं किया जा सका: java.util.Map)

@Id 
@GeneratedValue 
private Long id; 
private String name; 
@ElementCollection(targetClass = String.class) 
private Map<String, String> properties; 
private Double rate; 
private Integer votersCount; 
private Date releaseDate; 
private Integer runtime; 
@ManyToMany 
@JoinTable(name = "movie_director") 
@IndexColumn(name = "directorIndex") 
private List<Person> directors; 
@ManyToMany 
@JoinTable(name = "movie_writer") 
@IndexColumn(name = "writerIndex") 
private List<Person> writers; 
@OneToMany 
@IndexColumn(name = "roleIndex") 
private List<MovieRole> movieRoles; 
@ManyToMany 
@JoinTable(name = "movie_genre") 
@IndexColumn(name = "genreIndex") 
private List<Genre> genres; 

के रूप में आप देख सकते हैं, मैं हाइबरनेट एनोटेशन और वस्तु का इस्तेमाल किया है सेम है। लेकिन जब मैं निम्नलिखित कोड के साथ मेरी हाइबरनेट सत्र को खोलने का प्रयास ...

session = HibernateSessionFactory.getSessionFactory().openSession(); 

मैं एक Java.Util.Map वर्ग के नक्शे नहीं कर सकता है के बारे में कोई समस्या आती है।

org.hibernate.MappingException: Could not determine type for: java.util.Map, for columns: [org.hibernate.mapping.Column(properties)] 
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266) 
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253) 
at org.hibernate.mapping.Property.isValid(Property.java:185) 
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:410) 
at org.hibernate.mapping.RootClass.validate(RootClass.java:192) 
at org.hibernate.cfg.Configuration.validate(Configuration.java:1099) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1284) 
at main.HibernateSessionFactory.getSessionFactory(HibernateSessionFactory.java:29) 
at main.MainClass.main(MainClass.java:26) 

मैं हाइबरनेट करने के लिए नए हूँ और ठीक से पता नहीं क्या हो रहा है ... कृपया मेरी मदद करो: यहाँ अपवाद स्टैक ट्रेस है!

+0

आप हाइबरनेट का कौन सा संस्करण का उपयोग करते हैं है में मदद मिलेगी लगता है? – axtavt

उत्तर

3

ऐसा इसलिए है क्योंकि आपको कुछ jpa2 कार्यान्वयन का उपयोग करना है! इस आदमी था same problem

0

क्या आपके पास गुणों के लिए गेटटर और सेटर दोनों हैं?

+0

हां, मूवी क्लास पूरी तरह से बीन है, जिसका अर्थ है सभी ऑब्जेक्ट्स और डिफॉल्ट कन्स्ट्रक्टर के लिए सेटर और गेटर। – Ehphan

0

गुणों को सिर्फ List<String> प्रकार नहीं होना चाहिए?

ऐसा लगता है जैसे हाइबरनेट्स भ्रम मेरे जैसा ही है, एक सूची के बजाय प्रोपेरीज़ मानचित्र क्यों है? आप वास्तव में क्या करने की कोशिश कर रहे हैं?

+0

अच्छी तरह से, मेरे पास एकेए, भाषा, स्थान, पहलू अनुपात और किसी भी मूवी ऑब्जेक्ट के लिए गुणों की एक सूची है ... कि वे किसी ऑब्जेक्ट से दूसरे ऑब्जेक्ट में बदल सकते हैं, जिसका अर्थ है कि एक चाल में उनमें से सभी हो सकते हैं और दूसरा हो सकता है केवल 2 या 3! इसलिए मैं इस समस्या को हल करने के लिए एक मानचित्र का उपयोग करता हूं, क्योंकि मुझे लुसीन के साथ कुछ समस्याओं के कारण मूवी ऑब्जेक्ट में एक शून्य क्षेत्र नहीं होना चाहिए था, और अब मेरे पास नक्शा है जिसमें संपत्ति का नाम महत्वपूर्ण और मूल्य के रूप में मूल्य है! – Ehphan

0

आह मैं देखता हूं, इसकी ए। मुझे नहीं लगता कि आप एक प्राचीन तक मैप कर सकते हैं जब तक कि आप नवीनतम जार का उपयोग नहीं कर रहे हों। https://forum.hibernate.org/viewtopic.php?t=955308। उस लिंक को जांचें। क्या आप एक वर्ग को कुंजी और मूल्य के साथ गुण के रूप में बुला सकते हैं और फिर इसका उपयोग कर सकते हैं? मुझे एक ही समस्या थी और मुझे उस दृष्टिकोण का उपयोग करना पड़ा।

+0

आपका मतलब जावा मानचित्र के लिए प्रतिस्थापित करने के लिए एक वर्ग है? – Ehphan

+0

हां। फिर आप अपनी मुख्य कक्षा में एक सूची जोड़ सकते हैं। –

0

मैं भी सामना करना पड़ता है एक ही problem.It देर हो चुकी है, लेकिन मैं यह others.use @ MapKeyColumn.here मेरी सरल कोड

@ElementCollection(targetClass=String.class) 
@MapKeyColumn(name="Employee_Position") 
private Map<String,String> position=new HashMap<String,String>();