Hi Matthew,

This could indicate an OJB bug.
There a still some places where OJB relies on internal numbering of
Fielddescriptors. In the early days of OJB we used the Fielddescriptor Ids
to access the JDBC resultsets by column id.
It's already on our todo list to eliminate this problem.

As a Workaround you could try to modify the Ids of the remaining 3
Fielddescriptors to start with 1 and end with 3.

cheers,
Thomas

PS: please direct all requests to the user list, not to my personal address

> -----Urspr�ngliche Nachricht-----
> Von: Matthew Zach [mailto:IFMCSDPS.IFMC.MZach@;sdps.org]
> Gesendet: Donnerstag, 7. November 2002 18:08
> An: [EMAIL PROTECTED]
> Betreff: OJB
> 
> 
> Thomas,
> 
> I have a object that I need to map two different ways. I need 
> to have all the columns in some instances but only a few in 
> others. My problem is very similar to this one:
> 
> http://archives.apache.org/eyebrowse/ReadMsg?listName=ojb-user
> @jakarta.apache.org&msgId=457114
> 
> After I modify the class descriptor at runtime and call 
> broker.getIteratorByQuery( query ) , I get COLUMN NOT FOUND. 
> My code is below. Do you know how to get around this error? 
> It's like it's still looking for the three columns that I "unmapped".
> 
> Thanks.
> Matthew
> 
> 
> 
> ===========================================
>  PersistenceBroker broker = null;
>         FastArrayList result = new FastArrayList();
>         try {
>             broker = 
> PersistenceBrokerFactory.defaultPersistenceBroker();
>             
>             ClassDescriptor originalDescriptor = null;
>             try {                               
>                 DescriptorRepository myRep = 
> DescriptorRepository.getInstance();
>                 originalDescriptor = 
> myRep.getDescriptorFor(MissingDataWrapper.class);
>                 FieldDescriptor[] allFields = 
> originalDescriptor.getFieldDescriptions();
>                 
>                 ClassDescriptor filteredDescriptor = new 
> ClassDescriptor();                
>                 
> filteredDescriptor.setConnectionDescriptor(originalDescriptor.
> getConnectionDescriptor());
>                 
> filteredDescriptor.setClassOfObject(originalDescriptor.getClas
> sOfObject());
>                 
> filteredDescriptor.setClassNameOfObject(originalDescriptor.get
> ClassNameOfObject());
>                 
> filteredDescriptor.setIndexes(originalDescriptor.getIndexes());
>                 
> filteredDescriptor.setIsInterface(originalDescriptor.isInterface());
>                 
> filteredDescriptor.setIsolationLevel(originalDescriptor.getIso
> lationLevel());
>                 
> filteredDescriptor.setProxyClass(originalDescriptor.getProxyClass());
>                 
> filteredDescriptor.setProxyClassName(originalDescriptor.getPro
> xyClassName());
>                 
> filteredDescriptor.setRepository(originalDescriptor.getRepository());
>                 
> filteredDescriptor.setRowReader(originalDescriptor.getRowReader());
>                 
> filteredDescriptor.setRowReaderClassName(originalDescriptor.ge
> tRowReaderClassName());
>                 
> filteredDescriptor.setSchema(originalDescriptor.getSchema());
>                 filteredDescriptor.setTableName("my_table");
>                 
>                 Vector list = new Vector();
>                 for (int i=0;i<allFields.length;i++) {        
>             
>                     if (      
> !allFields[i].getColumnName().equalsIgnoreCase("col1") &&
>                               
> !allFields[i].getColumnName().equalsIgnoreCase("col2") &&
>               
> !allFields[i].getColumnName().equalsIgnoreCase("col3")        
>                      
>                    ) {
>                         
> filteredDescriptor.addFieldDescriptor(allFields[i]);
>                         System.out.println("Got here for " + 
> allFields[i].getColumnName());
>                         
>                         list.add(allFields[i]);
>                     }
>                      
>                 }
>       //Update Broker with new class descriptor...
>                 broker.setClassDescriptor(filteredDescriptor);
> 
>             }
>             catch (Exception e) {e.printStackTrace();}
>             
>             
>             Query query = QueryFactory.newQuery( 
> MissingDataWrapper.class, null, true );
> 
>             //*** This is the line with the exception ***
>             Iterator itr = broker.getIteratorByQuery( query );
>             
>             //Set back to original.
>             broker.setClassDescriptor(originalDescriptor);
>             
>             //Loop through results.
>             while(itr.hasNext()){
>                 //
>             }
>             
>         } catch( Exception e ) {
>             log.error( "Failed...", e );
>         } finally {
>             result.setFast( true );
>             try { broker.close(); } catch( Exception e ) {}
>         }
>             
> ==========================================
> 


--
To unsubscribe, e-mail:   <mailto:ojb-user-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:ojb-user-help@;jakarta.apache.org>

Reply via email to