2014-09-17 7 views
5

से गलत SQL क्वेरी बनाने लगता है, मैं किसी भी एचक्यूएल क्वेरी को निष्पादित करने के लिए एक फ़ंक्शन के साथ अपना डेटाबेस प्रोग्राम विस्तारित करने का प्रयास कर रहा हूं। मैं लगभग इसके साथ कर रहा हूं लेकिन मुझे निम्न प्रक्रिया पर एक त्रुटि मिलती है।हाइबरनेट एचक्यूएल क्वेरी

select p.reviews, p.title from Product p 

इस HQL क्वेरी निम्नलिखित के रूप में एक SQL क्वेरी में परिवर्तित किया जाता है:

Hibernate: select . as col_0_0_, product0_.title as col_1_0_, reviews1_.account_number as account_1_2_, reviews1_.product_id as product_2_2_, reviews1_.points as points3_2_, reviews1_.review as review4_2_ from dbprak12.view_product_meta product0_ inner join dbprak12.view_customer_evaluates reviews1_ on product0_.product_id=reviews1_.product_id 

आपको स्पष्ट रूप से देख सकते हैं, वहाँ एसक्यूएल राज्य कोड 42601. क्योंकि "के साथ एक त्रुटि फेंक दिया जाएगा col_0_0_ के रूप में।। .. "सही वाक्यविन्यास नहीं है। लेकिन मुझे समझ में नहीं आता कि क्यों हाइबरनेट इस एसक्यूएल क्वेरी बनाता है।

Product.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 

<class name="media.definitions.Product" table="dbprak12.view_product_meta"> 
    <id name="asin" column="product_id"> 
    <generator class="native" /> 
    </id> 
    <property name="title" column="title" /> 
    <property name="avgRating" column="rating" /> 
    <property name="salesRank" column="sales_rank" /> 
    <property name="picUrl" column="picture" /> 
    <set name="reviews" cascade="all" inverse="true" lazy="true"> 
     <key column="product_id" /> 
     <one-to-many class="media.definitions.Review" /> 
    </set> 
    <set name="categories" table="dbprak12.view_product_in_category" inverse="false" lazy="true" fetch="select" cascade="all"> 
    <key column="product_id" /> 
    <many-to-many column="category_id" class="media.definitions.Category" /> 
    </set> 
    <joined-subclass name="media.definitions.Book" table="dbprak12.view_book"> 
    <key column="product_id" /> 
    <property name="isbn" column="isbn" /> 
    <property name="publishers" column="publisher" /> 
    <property name="pubDate" column="publication" /> 
    <property name="pages" column="pages" /> 
    </joined-subclass> 
    <joined-subclass name="media.definitions.DVD" table="dbprak12.view_dvd"> 
    <key column="product_id" /> 
    <property name="format" column="fformat" /> 
    <property name="regionCode" column="region_code" /> 
    <property name="runningTime" column="running_time" /> 
    </joined-subclass> 
    <joined-subclass name="media.definitions.Music" table="dbprak12.view_cd"> 
    <key column="product_id" /> 
    <property name="labels" column="label" /> 
    <property name="releaseDate" column="release_date" /> 
    </joined-subclass> 
</class> 

</hibernate-mapping> 

Review.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 

<class name="media.definitions.Review" table="dbprak12.view_customer_evaluates"> 
<composite-id> 
    <key-property name="accountNumber" column="account_number" /> 
    <key-many-to-one name="product" class="media.definitions.Product" lazy="false"> 
     <column name="product_id"></column> 
    </key-many-to-one> 
</composite-id> 
<property name="rating" column="points" /> 
<property name="content" column="review" /> 
</class> 

</hibernate-mapping> 

संपादित करें:: मेरी हाइबरनेट विन्यास फाइल: हाइबरनेट

मैं निम्नलिखित दो एक्सएमएल मैपिंग का उपयोग करें। cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 

    <session-factory> 
     <property name="hibernate.connection.pool_size">10</property> 
     <property name="show_sql">true</property> 
     <property name="hibernate.current_session_context_class">thread</property> 

     <mapping resource="Product.hbm.xml"/> 
     <mapping resource="Category.hbm.xml"/> 
     <mapping resource="Review.hbm.xml"/> 
     <mapping resource="Person.hbm.xml"/> 
     <mapping resource="Offer.hbm.xml"/> 

    </session-factory> 
</hibernate-configuration> 

db2Module.properties

# 
# Database module to load 
# 
middleware.module:media.mediadbimpl.DB2Module 

# 
# Database properties 
# 

db.jdbc.dialect:org.hibernate.dialect.DB2Dialect 
db.jdbc.driver:com.ibm.db2.jcc.DB2Driver 
db.jdbc.url:jdbc:db2://anyurl.de:50001/datasource 
db.user:dbuser 
db.password:.dbpass. 
+0

अपनी 'hibernate.cfg.xml' फ़ाइल भी पोस्ट करें, कृपया? – hd1

+0

मेरी पोस्ट संपादित की गई :) एक गुण फ़ाइल और अधिक है, जो केवल कनेक्शन डेटा और बोलीभाषा (डीबी 2) –

+0

सेट करता है बोली लगाने की कोशिश करें जिसे आप खोज रहे हैं – hd1

उत्तर

0

नोट: यह एक शोध जवाब है, तो यह गलत हो सकता है नहीं है।

मुझे लगता है कि अपने त्रुटि यहाँ हो सकता है:

<column name="product_id"></column> 

मुझे लगता है कि इस

<column name="product_id" /> 

शरीर सामग्री (यहां तक ​​कि 0 वर्ण) के टैग में होने शरीर सामग्री नहीं होने से अलग है होना चाहिए। ("" करने के लिए तुलनीय और स्ट्रिंग के लिए नल)

प्रलेखन कहते हैं आप कुंजी

<key-many-to-one name="product" class="media.definitions.Product" lazy="false"> 
    <column name="product_id" /> 
</key-many-to-one> 

अंदर नेस्टेड स्तंभ तत्वों का उपयोग कर सकते हैं लेकिन इतना तो आप बस कर सकता है आप इसे उपयोग करने के लिए नहीं है:

<key-many-to-one name="product" class="media.definitions.Product" lazy="false" column="product_id" /> 

उपटैग आमतौर पर गैर मानक कॉलम के लिए उपयोग किया जाता है।

वैसे भी इसे एक शॉट

+0

तत्व ठीक है। यह एक समस्या नहीं होनी चाहिए। ओपी यह नहीं बताता है कि हाइबरनेट का किस संस्करण का उपयोग किया जा रहा है, लेकिन मुझे पता है कि ऐसे पुराने संस्करण हैं जिनमें स्केलर प्रश्नों के साथ समस्याएं हैं जो संग्रहों को भी पुनर्प्राप्त करती हैं जो * बिल्कुल * वह "SELECT p.reviews, p" के साथ क्या कर रही है .title "... p.reviews एक संग्रह है और p.title एक स्केलर है। –

+0

@ जोशुआ डेविस एक जवाब में फॉर्मूलेट करने के लायक हो सकता है :) – Joeblade

+0

मैं चाहता हूं कि मैं क्वेरी के लक्ष्य को समझ सकूं। संग्रह और स्केलर प्राप्त करने के लिए यह एक अजीब चीज है। साथ ही साथ इकाइयों को प्राप्त करें और ऑब्जेक्ट ग्राफ़ को नेविगेट करें जो आप चाहते हैं। हालांकि मैं सहमत हूं कि आपका मैपिंग एक्सएमएल बेहतर/क्लीनर है, प्रश्न में मैपिंग सिर्फ वही काम करना चाहिए। –

संबंधित मुद्दे