Diamantregen
Grünschnabel
Hallo,
waer toll wenn Ihr mir helfen koenntet.
Und zwar have ich eine Tabelle die heisst "Documents". In dieser Tabelle sind nun neben varchar2 und number Spalten auch folgende blob spalten vorhanden: document1, document2 und document3.
Ich habe nun folgende finder methode fuer diese Tabelle:
Bis hierhin so weit so gut.
Dann habe ich ein Session Bean welches eben jene Methode fuer den Klienten zur Verfuegung stellt:
Bemerkung: DocumentView ist lediglich ein Wrapper fuer ein DocumentValue
Meine Frage ist nun: Wird bei Aufruf der Methode des Session Beans jedes DocumentsView mit realen Daten gefuellt? Ich nehme mal stark an ja, denn die das Ausfuehren der Methode dauert sehr lang obwohl nur 3 Zeilen in der Tabelle vorhanden sind und ich daher die 3 blob Spalten Document1, Document2 und Documents3 als Ursache vermute.
Wie kann erreicht werden dass zunaechst nur Referenzen bestehen (wie es ja eigentlich der Fall sein sollte) und nur bei explizitem Aufruf die blob Daten aus der Datenbank geholt werden? Wie muesste dieser Aufruf dann aussehen?
Ich hatte mir zuerst ueberlegt nur die Spalten ohne die blobs in die finder methode zu schreiben und dann mit einer zusaetzlichen finder methoden pro blob dann die blobs explizit zu holen. Dies scheitert allerdings daran dass ich nirgends eine Moeglichkeit gefunden habe nur gewisse Spalten per finder zu holen und es mit Sicherheit eine andere Loesung fuer das oben beschriebene Problem geben muss.
Ich hoffe ein paar von Euch koennen mir einen Ratschlag geben, wenn moeglich mit Beispiel, danke
Beste Gruesse,
Roger
waer toll wenn Ihr mir helfen koenntet.
Und zwar have ich eine Tabelle die heisst "Documents". In dieser Tabelle sind nun neben varchar2 und number Spalten auch folgende blob spalten vorhanden: document1, document2 und document3.
Ich habe nun folgende finder methode fuer diese Tabelle:
Code:
<query>
<query-method>
<method-name>findByCustomerId</method-name>
<method-params>
<method-param>java.lang.Integer</method-param>
<method-param>java.util.Date</method-param>
</method-params>
</query-method>
<ejb-ql><![CDATA[select object(t) from Documents as t where t.customer.id=?1 AND t.updated > ?2 order by t.updated desc]]></ejb-ql>
</query>
Bis hierhin so weit so gut.
Dann habe ich ein Session Bean welches eben jene Methode fuer den Klienten zur Verfuegung stellt:
Code:
public ArrayList getDocumentsByCustomerId(Integer customerid, int days)
throws EJBException {
try {
InitialContext context = new InitialContext();
//Get the home interface with JNDI from the application server
DocumentsLocalHome documentsLocalHome = (DocumentsLocalHome) context.lookup(DocumentsLocalHome.JNDI_NAME);
Calendar now = Calendar.getInstance();
now.add(Calendar.DAY_OF_MONTH, -days++);
//get all Documents with the local home interface
Collection collection = documentsLocalHome.findByCustomerId(customerid, now.getTime());
//define an ArrayList
ArrayList arrayList = new ArrayList();
//loop over the collection
for (Iterator iter = collection.iterator(); iter.hasNext();) {
DocumentsLocal element = (DocumentsLocal) iter.next();
//define a new DocumentsView object
DocumentsView documentsView = new DocumentsView();
//set the DocumentsValue in documentsView
documentsView.setdocumentsValue(element
.getDocumentsValue());
//add the documentsView object to the ArrayList
arrayList.add(documentsView);
}
//return the array of DocumentsView
return arrayList;
} catch (NamingException e) {
throw new EJBException(e.getMessage());
} catch (FinderException e) {
throw new EJBException(e.getMessage());
}
}
Bemerkung: DocumentView ist lediglich ein Wrapper fuer ein DocumentValue
Meine Frage ist nun: Wird bei Aufruf der Methode des Session Beans jedes DocumentsView mit realen Daten gefuellt? Ich nehme mal stark an ja, denn die das Ausfuehren der Methode dauert sehr lang obwohl nur 3 Zeilen in der Tabelle vorhanden sind und ich daher die 3 blob Spalten Document1, Document2 und Documents3 als Ursache vermute.
Wie kann erreicht werden dass zunaechst nur Referenzen bestehen (wie es ja eigentlich der Fall sein sollte) und nur bei explizitem Aufruf die blob Daten aus der Datenbank geholt werden? Wie muesste dieser Aufruf dann aussehen?
Ich hatte mir zuerst ueberlegt nur die Spalten ohne die blobs in die finder methode zu schreiben und dann mit einer zusaetzlichen finder methoden pro blob dann die blobs explizit zu holen. Dies scheitert allerdings daran dass ich nirgends eine Moeglichkeit gefunden habe nur gewisse Spalten per finder zu holen und es mit Sicherheit eine andere Loesung fuer das oben beschriebene Problem geben muss.
Ich hoffe ein paar von Euch koennen mir einen Ratschlag geben, wenn moeglich mit Beispiel, danke

Beste Gruesse,
Roger