-->
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.  [ 3 posts ] 
Author Message
 Post subject: Geoße Menge von Datensätzen
PostPosted: Tue Jan 08, 2008 12:28 pm 
Newbie

Joined: Tue Jan 08, 2008 11:45 am
Posts: 3
Hallo Zusammen!

Ich habe ein Problem, dass hier hoffentlich nicht an der falschen Stelle gelandet ist:

In meiner Anwendung muss ich in manchen Fällen eine große Anzahl von IDs (PKs in der DB) verwenden, um mit Hilfe von Hibernate vollständige Datensätze/Objekte aus der DB zu generieren. (Dies ist auch nicht zu ändern, da in der Anwendung immer nur kleine Teile von großen Objekten angezeigt werden und die vollständigen Objekte/Datensätze nicht vorliegen.)

Bei mehreren tausend IDs ist dieser Prozess ein absoluter Performance-Killer, da jede einzelne Anfrage seine Zeit benötigt. Bis jetzt baue ich daher eine lange Query der folgende Form:

FROM DBTable WHERE id = 1 OR id = 3 OR ... OR id = 15432;

Ab einer bestimmten Länge kann dies von Hibernate aber nicht verarbeitet werden, daher baue ich mehrere Queries mit z.B. 400 IDs pro Query.

Dies ist aber bestimmt nicht der elegante Weg.
Kann mir jemand helfen?
Danke und schöne Grüße,
Joseph


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jan 08, 2008 1:41 pm 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Mögliche Lösungen:
-
session.get verwenden und den Cache aktivieren.
-
session.createQuery("from XY x where x.id in ?).setParameterList

Wieviele Werte in unterstützt hängt von der DB ab und kann evt. in der DB Konfiguration erhöht werden.

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 09, 2008 5:39 am 
Newbie

Joined: Tue Jan 08, 2008 11:45 am
Posts: 3
Hallo LaLiLuna!

Danke für die schnelle Antwort!

Die erste Lösung kann ich nicht verwenden, da es sich bei meiner Anwendung um eine RC-Anwendung handelt, und da will ich mich nicht auf den Cache der Session verlassen.

Die zweite Lösung ist genau das, was ich gesucht (und bei der Suche in der Hibernate-API nicht gefunden) habe.

Mit
session.createQuery("from XY x where x.id in ?).setParameterList
können zwar maximal 2000 parameter gesendet werden (die Beschränkung wird vermutlich von Hibernate und nicht von der verwendeten DB (MSSQL) gegeben, es gibt folgende Exception: ERROR org.hibernate.util.JDBCExceptionReporter - Prepared or callable statement has more than 2000 parameter markers.), aber das ist ausreichend und kann notfalls in mehrere Anfragen aufgesplittet werden. Die Performance ist auch (vergleichsweise) sehr gut!

Nochmals Danke,
Joseph


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 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.