2014-09-17 4 views
5

Ich versuche, mein Datenbankprogramm mit einer Funktion zum Ausführen einer beliebigen HQL-Abfrage zu erweitern. Ich bin fast fertig damit, aber ich bekomme einen Fehler im folgenden Prozess.Hibernate scheint falsche SQL-Abfrage von HQL-Abfrage zu erstellen

select p.reviews, p.title from Product p 

Diese HQL-Abfrage in einer SQL-Abfrage wie folgt umgerechnet:.

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 

Wie Sie offenbar sehen können, wird es mit dem SQL-Status Code 42601. Weil ", wie col_0_0_ einen Fehler ausgelöst werden. .. "ist nicht die richtige Syntax. Aber ich verstehe nicht, warum Hibernate diese SQL-Abfrage erstellt.

Ich verwende die folgenden zwei XML-Mappings:

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> 

Edit: Meine Hibernate-Konfigurationsdatei: Hibernate. 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

Post 'hibernate.cfg.xml' Datei auch, bitte? – hd1

+0

Bearbeitete meinen Post :) Habe eine Eigenschaftendatei weiter, die nur Verbindungsdaten und Dialekt setzt (DB2) –

+0

Versuch, den Dialekt zu deklarieren, den du explizit verwendest – hd1

Antwort

0

HINWEIS: dies ist keine Antwort recherchiert, so dass es falsch sein.

denke ich, Ihre Fehler hier sein könnten:

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

Ich denke, die

<column name="product_id" /> 

Mit Körperinhalt (auch 0 Zeichen) in einem Tag anders ist, als nicht mit Körpergehalt sein sollte. (vergleichbar mit „“ und null für string)

die Dokumentation sagt, dass Sie verschachtelte Spaltenelemente im Inneren der Schlüssel

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

verwenden können, aber sie scheinen nicht, es zu benutzen, so können Sie einfach tun könnte:

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

Das Untertag wird normalerweise für Nicht-Standard-Spalten verwendet.

es trotzdem geben einen Schuss

+0

Das Element ist in Ordnung. Das sollte kein Problem sein. Das OP gibt nicht an, welche Version von Hibernate verwendet wird, aber ich weiß, dass es ältere Versionen gibt, die Probleme mit skalaren Abfragen haben, die auch Auflistungen abrufen, was * genau * ist, was er hier mit "SELECT p.reviews, p .title "... p.reviews ist eine Sammlung und p.title ist ein Skalar. –

+0

@JoshuaDavis könnte es wert sein, in einer Antwort dann zu formulieren :) – Joeblade

+0

Ich würde, wenn ich das Ziel der Abfrage verstehen könnte. Es ist eine seltsame Sache, eine Sammlung und einen Skalar zu bekommen. Sie können auch einfach die Entitäten abrufen und durch das Objektdiagramm navigieren, um zu erhalten, was Sie wollen. Obwohl ich stimme zu, dass Ihre Mapping-XML besser/sauberer ist, sollten die Zuordnungen in der Frage genauso funktionieren. –