Mede tweakerds, ik zit met een probleem waar ik nu al ruim een dag op zit te bikkelen en ik kom er niet uit. Ik ben bezig met een applicatie icm hibernate. Eerst even een stukje jsp code:
Oorspronkelijk was het de bedoeling dat ik een lijst met customers krijg van de klasse Customer die naast een aantal properties een object Account in zich heeft. Ik wil alleen de gegevens hebben van die Customers die geassocieerd zijn met het Account.id = x.
Momenteel ben ik al blij als ik uberhaupt een lijst met customers terug krijg vandaar de uitgecommentaarde eerdere queries. Uiteraard moet er later nog een iterator op komen maar zover kom ik niet eens momenteel.
Als ik deze HQL query uitvoer duurt het eonen voordat ik een result krijg van de server met als resultaar (uit de logs):
De database bestaat, connectie maken lukt, hibernate configuratie is in orde en dingen zoals
lukken wel (maar dat is dus met criteria en niet met HQL) en ik heb HQL nodig omdat ik onder water straks versiebeheer moet plegen op records...lang verhaal)
De tabel Customer bevat momenteel 1 record en de tabel Account 2 records waarvan het ene record Customer.accountid verwijst naar Account.id (database technisch. met hibernate dus customer.account.id). Ook dit kan ik allemaal correct uitlezen als ik de Criteria API gebruik (getest met een lijst van accounts vandaar de id in de request.parameters).
Heeft iemand een idee waarom het hele HQL verhaal niet werkt? Ik zit echt ramvast en heb zo'n beetje alle api docs, forum posts, boeken en zooi gehad en ik kom er echt niet uit.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| try{ //Verkrijg een sessie en begin een transaction hibernateSession = AppSession.getSession(); myTransaction = hibernateSession.beginTransaction(); //Query hql = hibernateSession.createQuery("from Customer c where c.account.id in (select a.id from Account a where a.id = "+request.getParameter("id")+ ") group by c.account.id"); //Query hql = hibernateSession.createQuery("from Customer c where c.account.id = "+request.getParameter("id")); Query hql = hibernateSession.createQuery("from Customer as c"); customers = hql.list(); myTransaction.commit(); } catch (Exception e) { error = e.getMessage(); e.printStackTrace(); try{ myTransaction.rollback(); } catch (Exception e2){;} } finally { try { hibernateSession.close();} catch (Exception e){;} } |
Oorspronkelijk was het de bedoeling dat ik een lijst met customers krijg van de klasse Customer die naast een aantal properties een object Account in zich heeft. Ik wil alleen de gegevens hebben van die Customers die geassocieerd zijn met het Account.id = x.
Momenteel ben ik al blij als ik uberhaupt een lijst met customers terug krijg vandaar de uitgecommentaarde eerdere queries. Uiteraard moet er later nog een iterator op komen maar zover kom ik niet eens momenteel.
Als ik deze HQL query uitvoer duurt het eonen voordat ik een result krijg van de server met als resultaar (uit de logs):
code:
1
2
| 2006-01-12 09:25:44 StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception java.lang.OutOfMemoryError: Java heap space |
De database bestaat, connectie maken lukt, hibernate configuratie is in orde en dingen zoals
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| try{ //Verkrijg een sessie en maak een iterator op de Customer tabel. hibernateSession = AppSession.getSession(); myTransaction = hibernateSession.beginTransaction(); Criteria query = hibernateSession.createCriteria(Customer.class); customers = query.list().iterator(); myTransaction.commit(); } catch (Exception e) { error = e.getMessage(); e.printStackTrace(); try{ myTransaction.rollback(); } catch (Exception e2){;} } finally { try { hibernateSession.close();} catch (Exception e){;} } |
lukken wel (maar dat is dus met criteria en niet met HQL) en ik heb HQL nodig omdat ik onder water straks versiebeheer moet plegen op records...lang verhaal)
De tabel Customer bevat momenteel 1 record en de tabel Account 2 records waarvan het ene record Customer.accountid verwijst naar Account.id (database technisch. met hibernate dus customer.account.id). Ook dit kan ik allemaal correct uitlezen als ik de Criteria API gebruik (getest met een lijst van accounts vandaar de id in de request.parameters).
Heeft iemand een idee waarom het hele HQL verhaal niet werkt? Ik zit echt ramvast en heb zo'n beetje alle api docs, forum posts, boeken en zooi gehad en ik kom er echt niet uit.
T is for TANK, and T is for TERROR ... and K is the K for KILLING in error.