2012-01-11 21 views
6

के बजाय समानार्थी पर जेपीए एनटीई मेरे पास एक सीम 2.2 आधारित जावा ईई 5 वेब एप्लिकेशन है जिसमें जेपीए 1.0 इकाइयों के लिए मैब किए गए टेबल के समूह के साथ हाइबरनेट 3.3.3 के माध्यम से मैप किया गया है। विकास के दौरान यह टॉमकैट 6, ओरेकल 10 एक्सई और विंडोज 7 पर चल रहा है।तालिका

अब, हमारे पास ऑपरेशन विभाग द्वारा डेटा मॉडल को एक स्कीमा में सभी डेटाबेस ऑब्जेक्ट्स (myschema) और एक स्कीमा के स्वामी के रूप में विभाजित करने का अनुरोध था एप्लिकेशन के डेटाबेस उपयोगकर्ता के रूप में कार्य करना (myschema_app)।

  • बनाने स्कीमा myschema_app
  • अनुदान वस्तु अधिकार सभी आवश्यक टेबल पर myschema (दोनों नियमित रूप से लोगों को और n: मीटर मध्यवर्ती तालिकाओं) से: और दृश्यों उपयोग के आधार पर (एक या select अधिक की तो मैं निम्नलिखित किया , insert, update, delete) myschema_app को
  • निजी समानार्थी शब्द myschema_app में आदेश से पहले की तुलना में एक ही नाम का उपयोग करने में घोषित करने और छुपा अन्य स्कीमा का नाम उपसर्ग
  • परिवर्तन संपत्तिनई स्कीमा नाम कोpersistence.xml
  • में उपयोगकर्ता परिवर्तन/context.xml

में बिलाव के डेटा स्रोत परिभाषा पासवर्ड जब मैं आवेदन शुरू करते हुए validate को hibernate.hbm2ddl.auto सेट होने, मैं एक अपवाद जब ढांचा EntityManagerFactory बनाने की कोशिश करते मिल मुझे बता रहा है कि एक टेबल गुम है। जब मैं सीधे myschema_app कनेक्ट के साथ एक एसक्यूएल उपकरण में एक चयन कथन निष्पादित करता हूं, तो सब कुछ ठीक काम करता है।

मुझे समझ में आया कि किसी अन्य तालिका पर जाने वाले समानार्थी का उपयोग एप्लिकेशन के लिए पारदर्शी है। क्या किसी को यह पता है कि मैंने क्या अनदेखा किया होगा?

उत्तर

8

मेरा अनुमान है कि hbm2ddl विशेष रूप से तालिकाओं के लिए सीच करता है, न कि समानार्थियों के लिए, लेकिन यह कि आपके आवेदन को वास्तव में कार्य करना चाहिए जैसे कि स्कीमा में तालिकाएं मौजूद थीं। Hbm2ddl विकल्प को हटाने का प्रयास करें और अपने एप्लिकेशन का परीक्षण करें।

संपादित करें: ऐसा लगता है मेरा अनुमान सही है: https://forum.hibernate.org/viewtopic.php?p=2438033

+0

कुछ त्वरित जवाब, 10 अंक अर्जित किए था। हां, मैंने पहले ही देखा है कि उस पैरामीटर को छोड़कर एप्लिकेशन काम करता है, लेकिन यह एक दयालुता है कि हाइबरनेट सत्यापन के दौरान समानार्थी का समर्थन नहीं करता है, क्योंकि मुझे लगता है कि स्टार्टअप पर स्कीमा को सत्यापित करना एक अच्छी बात है ताकि यह सुनिश्चित हो सके कि यह एप्लिकेशन फिट बैठता है । –

+0

समस्या हाइबरनेट्स org.hibernate.tool.hbm2ddl.DatabaseMetadata कक्षा में है जहां तालिका प्रकार निजी स्थिर अंतिम स्ट्रिंग [] TYPES = {"तालिका", "दृश्य"} में हार्डकोड किए गए हैं; जहां यह वास्तव में निजी स्थिर अंतिम स्ट्रिंग [] TYPES = {"तालिका", "दृश्य", "ALIAS", "SYNONYM"} होना चाहिए; – user482745

2

4.3.0 के रूप में, यह संभव समानार्थक शब्द के साथ अपनी समस्या को हल करने के लिए hibernate.synonyms=true स्थापित करने के लिए है।

संदर्भ:

https://github.com/hibernate/hibernate-orm/commit/1df4b2ea3c98c74f3b6bbd42e266ee5c7ad60d27

https://hibernate.atlassian.net/browse/HHH-8183

https://github.com/hibernate/hibernate-orm/pull/508