-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 8 posts ] 
Author Message
 Post subject: Probleme bei CreateSQLQuery
PostPosted: Thu Sep 15, 2005 4:54 am 
Regular
Regular

Joined: Sat Sep 03, 2005 9:07 am
Posts: 87
Location: Graz, AUSTRIA
Hab jetzt ein SQLQuery versucht, jedoch scheitere ich

Erstmals fang ich es etwas komisch, dass die Methode createSQLQuery nur mehr einen String braucht und man den Alias und den Klassennamen nur mehr als addEntity hinzufügen kann (diese Implementierung fand ich in keiner Docu...)

Und sobald ich nun bestimmte Spalten auslesen will, bekomme ich den Fehler:
Code:
exception

javax.servlet.ServletException: #{queryHelper.listSearchResults}: javax.faces.el.EvaluationException: org.hibernate.exception.SQLGrammarException: could not execute query
   javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)

root cause

javax.faces.FacesException: #{queryHelper.listSearchResults}: javax.faces.el.EvaluationException: org.hibernate.exception.SQLGrammarException: could not execute query
   com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:78)
   javax.faces.component.UICommand.broadcast(UICommand.java:312)
   javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
   javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
   com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)
   com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
   com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
   javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)



Meine Code:
Code:
String sql ="Select e.PA_ID as {e.paId} from ET_EDI_Partner {e}";
         
         Query q = session.createSQLQuery(sql)
         .addEntity("e",EtEdiPartner.class);
         querylist=q.list();



Komischerweise hat dies funktioniert:

Code:
String sql ="Select {e.*}  from ET_EDI_Partner {e}";
         
         Query q = session.createSQLQuery(sql)
         .addEntity("e",EtEdiPartner.class);
         querylist=q.list();


Langsam fang ich bei Hibernate wirklich zum Verzweifeln an, weil leider nichts so funktioniert, wie ich es mir vorstelle...

Am Ende soll dann folgendes Query rauskommen:
Code:
Select e.s_id, c.company, e.location, b.edisector, e.actisname, g.gw_name, g.ssid, g.sfid, a.method from et_edi_partner e
Inner Join et_company c on e.CO_ID = C.CO_ID
Inner Join et_edisector b on e.EDI_ID=b.EDI_ID
Inner Join et_gateway g on e.GW_ID = g.gw_id
Inner Join et_access_method a on g.a_id = a.a_id



Bitte um Hilfe!



Hibernate version:
3.0.5
Mapping documents:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping schema="EDITOOLS" package="com.magnasteyr.editool.hibernate">
  <class name="EtEdiPartner" dynamic-update="true" dynamic-insert="true" lazy="false" table="ET_EDI_PARTNER">
    <id name="paId" type="long" unsaved-value="null">
      <column name="PA_ID" not-null="true" sql-type="NUMBER"/>
      <generator class="sequence"/>
    </id>
.....
....
  </class>
</hibernate-mapping>



Top
 Profile  
 
 Post subject: Re: Probleme bei CreateSQLQuery
PostPosted: Sun Sep 18, 2005 5:43 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
Semmerl wrote:
Meine Code:
Code:
String sql ="Select e.PA_ID as {e.paId} from ET_EDI_Partner {e}";
Query q = session.createSQLQuery(sql).addEntity("e",EtEdiPartner.class);
querylist=q.list();

Das Problem ist, dass SQLQuery nicht funktioniert, wie du es annimmst - war zuerst auch mein Fall...

Um das zu machen, was du oben möchstest, solltest du soetwas wie
Code:
String sql = "Select e.PA_ID as paId from ET_EDI_Partner e";
SQLQuery q = session.createSQLQuery(sql).addScalar("paId", Hibernate.LONG);
querylist = q.list();

Ich glaube allerdings nicht, dass es besonders gut wäre. Ich denke, dass HQL dafür besser geeignet ist - sofern die anderen Probleme auf die du gestolpert bist, korrigiert sind...

Zu arbeitsweise von SQLQuerys: sie geben scheinbar - ist zugegeben für den Laien nicht unmittelbar aus der Beschreibung zu erkennen - nur ganze Entities zurück, wenn man addEntity verwendet.

Hoffe, es hilft dir ein wenig weiter.

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Sun Sep 18, 2005 6:22 am 
Regular
Regular

Joined: Sat Sep 03, 2005 9:07 am
Posts: 87
Location: Graz, AUSTRIA
Nachdem nun ja meine Queries eh mit HQL auch funktionieren werd ich eh bei HQL bleiben...

Meinst du übrigens, dass SQLQueries nur die komplette Entity zurückgeben und ich somit wieder zig Selects habe oder verstehe ich dich da falsch?


Top
 Profile  
 
 Post subject:
PostPosted: Sun Sep 18, 2005 7:08 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
Semmerl wrote:
...und ich somit wieder zig Selects habe ...

Ich gebe zu, dass ich jetzt nicht weiß, was du mit "zig Selects" meinst (du hast sichtlich eines deiner Anwemdungsfälle im Kopf, ich weiß aber nicht sicher welches) - kann daher deine Frage nicht beantworten...

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Sun Sep 18, 2005 7:48 am 
Regular
Regular

Joined: Sat Sep 03, 2005 9:07 am
Posts: 87
Location: Graz, AUSTRIA
Mit zig Selects meine ich, dass Hibernate (warum auch immer) statt des einen Selects komischerweise mehrere Select Statements ausführt und somit die Anfrage deutlich länger dauert.

Mal eine ganz andere Frage, passt zwar nicht ganz rein,aber da du dich super mit Hibernate auskennst würde es mich interessiert, ob du dich mit JSF auch schon beschäftigt hast?

Hab nämlich ein Problem, dass ich bei einer Datatable die Werte, die ich von der Hibernate Query zurückbekomme, nicht ausgeben kann..

Wennst du dich auskennst, würde ich dir das gerne näher beschreiben.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Sep 18, 2005 10:04 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
Semmerl wrote:
Mit zig Selects meine ich, dass Hibernate (warum auch immer) statt des einen Selects komischerweise mehrere Select Statements ausführt und somit die Anfrage deutlich länger dauert.

Ich denke nicht, dass beides (Art, wie SQLQueries funktionieren u. die zig Selects) miteinander zu tun haben. Die zig-Selects sind einfach ein Bug, wie SQLQuery funktioniert ein Feature - diese Behauptungen sind nur "aus dem Bauch" heraus, mit dem Inneren von Hibernate kenne ich mich nicht so besonders aus.

Semmerl wrote:
Mal eine ganz andere Frage, passt zwar nicht ganz rein,aber da du dich super mit Hibernate auskennst würde es mich interessiert, ob du dich mit JSF auch schon beschäftigt hast?

Mit JSF haben wir zwar in meinem aktuellen Projekt etwas getan (und ich auch "hineingeschnuppert"), haben es aber, nachdem wir wiederholt mit Problemen konfrontiert wurden, wieder aufgegeben und sind auf Struts "zurückgestiegen". Ich kann also eher nicht helfen :-(.

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Sun Sep 18, 2005 12:03 pm 
Regular
Regular

Joined: Sat Sep 03, 2005 9:07 am
Posts: 87
Location: Graz, AUSTRIA
Ich versuche es einfach mal, vielleicht kannst du mir helfen:

Ich habe Probleme beim Anzeigen von Werten in einer Datatable.

Ich bekomme aus der Datenbank eine Liste, die ich per Hibernate Query erzeuge. Dazu verwende ich folgendes Queries (also dieses Select wird von Hibernate erzeugt)

Code:
Code:
select etedipartn0_.PA_ID as col_0_0_, etcompany1_.COMPANY as col_1_0_, etedipartn0_.LOCATION as col_2_0_, etedisecto2_.EDISECTOR as col_3_0_, etedipartn0_.ACTISNAME as col_4_0_, etgateway3_.GW_NAME as col_5_0_, etgateway3_.SSID as col_6_0_, etaccessme6_.METHOD as col_7_0_ from EDITOOLS.ET_EDI_PARTNER etedipartn0_, EDITOOLS.ET_COMPANY etcompany1_, EDITOOLS.ET_EDISECTOR etedisecto2_, EDITOOLS.ET_GATEWAY etgateway3_, EDITOOLS.ET_ACCESS_METHOD etaccessme6_ where etgateway3_.A_ID=etaccessme6_.A_ID and etedipartn0_.GW_ID=etgateway3_.GW_ID and etedipartn0_.EDI_ID=etedisecto2_.EDI_ID and etedipartn0_.CO_ID=etcompany1_.CO_ID


Das Ergebnis der Query wird dann in einer Liste gespeichert mit der Variable queryresult.


Auf der JSF-Seite habe ich dann eine Datatable mit verschiedenen Zeilen und nun will ich die einzelnen Werte der DB-Abfrage in der Datatable anzeigen, weiß aber nicht, wie ich die Werte da rein bekomme.

Hier ist meine Table..
Code:
Code:
<h:dataTable value="#{queryHelper.queryresult}" var="result"
styleClass="smalltable_grey" width="100%" headerClass="kopf"
rowClasses="ungerade, gerade">

<h:column>
<f:facet name="header">
<h:outputText value="#{msg.tablestatus}" />
</f:facet>
<h:outputText value="#{result.[b]WHATTOWRITEHERE[/b]}" />
</h:column>
</h:dataTable>


Das Problem ist, dass ich nicht weiß, was ich beim OutputText hinschreibe. Ich habe zwar die Variable "Result" in der Datatable festgesetzt, in dieser ersten Column soll nun (et_compan1_.Company) angezeigt werden...
Brauche ich dazu eine eigene Bean oder wie kann ich diese Werte setzen?
Weißt was ich mein?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 19, 2005 1:39 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
Zu deiner JSF-Frage: ich muss passen. Ich bin einfach nicht fit genug auf dem Gebiet.

Erik


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 8 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.