# HQL Frage



## k4lle (10. Jan 2008)

Ich habe folgende Abfrage:

ergebnis = session.createQuery("from Maschinendaten where betriebsmittel " +
		"like :betr and kunde_nr like :k_nr and serien_nr like :s_nr")
		.setInteger("betr", betr).setInteger("k_nr", k_nr).setInteger("s_nr", s_nr)
		.list();

Funktioniert auch soweit. Ich schreibe die Parameter der Operation in die Abfrage.
Ich will die Abfrage aber noch verfeinern. Weiß aber nicht wie.

Beispiel:
"from Maschinendaten where betriebsmittel like '111%'"
hier findet die abfrage alle betrebsmittel mit 111 am anfang. so soll es bei der oberen abfrage auch sein. 
ich weiß aber nicht wie ich das % in die obere abfrage einbaue. 
für hilfe wäre ich sehr dankbar...


----------



## SlaterB (10. Jan 2008)

erstmal SQL programmieren, dann HQL,
ein Zahlfeld kannst du doch in SQL nicht mit like abfragen oder?

andererseits sagst du ja dass es klappt, ist betriebsmittel doch eine Zeichenkette?
funktioniert setString("betr", betr+"%"). ?


----------



## k4lle (14. Jan 2008)

also die abfrage funktioniert so wie sie ist.

betriebsmittel ist ein Integer und ich kann es in HQL mit like abfragen. 

wenn du mir sagen kannst, das ich mit Hilfe von SQL folgende Abfrage mache kann, dann kann ich auch sofort SQL benutzen. Ich weiß halt bloß nicht wie ich meine Parameter in die SQL-Abfrage packe.

select betriebsmittel from maschinendaten where betriebsmittel like '?%';

wenn du mir jetzt sagen kannst wie ich mein parameter aus der methode für das ? einsetzen kann, dann benutze ich sofort SQL. 

ich denke ist verständlich was ich meine oder?


----------



## SlaterB (14. Jan 2008)

also ich habe das bei mir jetzt auch mal ausprobiert, funktioniert in SQL
und in HQL mit 
setString("s_nr", "6%")
dann mach es doch so, zahl + "%" wirst du jawohl manuell zusammenbauen können


----------



## k4lle (14. Jan 2008)

ok wenn du sagst das funktioniert so, dann werde ich das gleich mal versuchen. 

es gibt aber noch eine sache die ich ich zuvor begreifen bzw. lösen muss. dazu hast du in einem anderen thread auch was geschrieben. 

danke


----------



## maki (14. Jan 2008)

http://www.hibernate.org/hib_docs/reference/en/html/querycriteria.html
http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Criteria.html


----------



## k4lle (14. Jan 2008)

klappt wunderbar so wie du mir gesagt hast SlaterB. 
So soll es funktionieren.

an maiki: wieso sollte ich das mittels criteria machen? was für vorteile bringen mir criterias im gegensatz zu hql oder sql?


----------



## SlaterB (14. Jan 2008)

bei Criteria muss man das % auch manuell einfügen, nix gewonnen


----------



## maki (14. Jan 2008)

> an maki: wieso sollte ich das mittels criteria machen? was für vorteile bringen mir criterias im gegensatz zu hql oder sql?


So macht man das normalerweise in Hibernate, wäre auch ziemlich seltsam für so einfache Dinge immer gleich wieder auf SQL runterzugehen, mit ORM sollte man so gut wie gar kein SQL mehr schreiben, sehr selten ist es unvermeidbar, aber nie erwünscht.

Abgesehen davon ist Criteria genau dafür gemacht


----------



## k4lle (14. Jan 2008)

ok. wenn du das so sagst, dann gehe ich davon aus das du aus der "praxis-sicht" redest.

wenn ich mir bücher durchlese wird mir lediglich gesagt, dass es 3 möglichkeiten für db-abfragen gibt (sql, hql, criterias) und die theorie zu diesen erklärt. welche man benutzen sollte wird nie genau gesagt. deswegen habe ich bisher gedacht, dass es im prinzip egal ist wie man dier abfragen macht. 

wenn du mir aber sagt, dass versucht wird möglichst alles mittels criterias zu lösen, dann glaube ich dir das mal und werde das ab jetzt versuchen einzuhalten


----------



## SlaterB (14. Jan 2008)

HQL ist mächtiger und lesbarer als Criteria und wird mehr verwendet,

der einzige Vorteil von Criterial ist der objektorierte Zusammenbau statt mit if/ else einzelne Teilstrings zusammenzuschnipseln,
macht man aber eh fast nie und wenn, dann mit der Gefahr, mit den Criterias nicht auszukommen und doch noch eigene Erweiterungen einzubauen..

--------

> wäre auch ziemlich seltsam für so einfache Dinge immer gleich wieder auf SQL runterzugehen

? 
LIKE in HQL ist offensichtlich nicht anders als in Criteria,
außer lesbarer


----------

