No.  OJB currently only joins on the related object primary key (which
it already knows from the mapping), so what is needed is the foreign key
field in NewClientGroup that relates to ClientRelationship.

Remember that in Reference or Collection Descriptors it is always
looking for the foreign key.

Hope this helps.


-----Original Message-----
From: Lemke, Wesley [mailto:[EMAIL PROTECTED] 
Sent: Thursday, March 24, 2005 8:01 AM
To: OJB Users List
Subject: RE: Problem retrieving collection.

Is my assumption wrong?  In this case:

<reference-descriptor name="clientRelationship"
class-ref="model.client.ClientRelationship">
                <foreignkey field-ref="objectId"/>
</reference-descriptor>

Isn't objectId supposed to be the primary key field of
model.client.ClientRelationship?

-----Original Message-----
From: Lemke, Wesley [mailto:[EMAIL PROTECTED]
Sent: Wednesday, March 23, 2005 1:23 PM
To: OJB Users List
Subject: RE: Problem retrieving collection.


When I change objectId to clientRelationshipId I get this error:  

org.apache.ojb.broker.OJBRuntimeException: Incorrect or not found field
reference name 'clientRelationshipId' in descriptor
[EMAIL PROTECTED]
rieve=true,cascade_store=object,cascade_delete=object,is_lazy=false,clas
s_of_Items=class model.client.NewClientGroup] for class-descriptor
'model.client.ClientRelationship'

objectId is the pk of all our persistent classes (they all extend
AdmObject which contains objectId).  I was under the impression that the
forignkey element should have the pk of the referenced class.  In this
case NewClientGroup has a reference to ClientRelationship, and the pk of
ClientRelationship is objectId.  clientRelationshipId is a field in
NewClientGroup that has the pk of it's parent ClientRelationship (I
don't have clientRelationshipId as anonymous below...I've been switching
back and forth on that one).  


-----Original Message-----
From: Armin Waibel [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, March 23, 2005 12:27 PM
To: OJB Users List
Subject: Re: Problem retrieving collection.


Hi again,

change

<foreignkey field-ref="objectId"/>

to

<foreignkey field-ref="clientRelationshipId"/>

in

<reference-descriptor name="clientRelationship"
class-ref="model.client.ClientRelationship">
                <foreignkey field-ref="objectId"/>
</reference-descriptor>

of class NewClientGroup.

regards,
Armin


Lemke, Wesley wrote:
> I apologize for sending so many messages to the list, but this one
> really has me scratching my head.  Here is the data stored in the
> database:
> 
> mysql> select group_id, client_id, name, parent_id, class_name from
> client_group;
> +----------+-----------+---------------------+-----------+------------
> +----------+-----------+---------------------+-----------+--
> ---------------+
> | group_id | client_id | name                | parent_id | class_name
> |
> +----------+-----------+---------------------+-----------+------------
> +----------+-----------+---------------------+-----------+--
> ---------------+
> |        1 |         1 | First Client Group  |      NULL |
> model.client.NewClientGroup |
> |        4 |         1 | Second Client Group |      NULL |
> model.client.NewClientGroup |
> +----------+-----------+---------------------+-----------+------------
> +----------+-----------+---------------------+-----------+--
> ---------------+
> 2 rows in set (0.00 sec)
> 
> mysql> select * from client;
> +-----------+--------------+--------------------+
> | client_id | agr_approver | last_modified_user |
> +-----------+--------------+--------------------+
> |         1 | Zeus         | N0079911           |
> +-----------+--------------+--------------------+
> 1 row in set (0.01 sec)
> 
> Here is my mapping (It worked fine for storing the items):
> 
> <class-descriptor
>       class="model.AdmObject">
>       <extent-class class-ref="model.client.ClientRelationship" />
>       <extent-class class-ref="model.client.GenericGroup" />
> </class-descriptor>
> 
> <class-descriptor
>       class="model.client.GenericGroup">
>       <extent-class class-ref="model.client.NewClientGroup" />
> </class-descriptor>
> 
> <class-descriptor
>       class="model.client.ClientRelationship"
>       table="client">
>     <field-descriptor
>         name="objectId"
>         column="client_id"
>         jdbc-type="INTEGER"
>         primarykey="true"
>         autoincrement="true"
>         access="readonly"
>         />
>     <field-descriptor
>       name="nameOfApproverOfNoContract"
>       column="agr_approver"
>       jdbc-type="VARCHAR"
>       />      
>       <collection-descriptor
>               name="clientGroups"
>               element-class-ref="model.client.NewClientGroup"
>               auto-delete="true"
>               auto-update="true"
>       >
>               <inverse-foreignkey field-ref="clientRelationshipId" />
>       </collection-descriptor>    
> </class-descriptor>
> 
> <class-descriptor
>       class="model.client.NewClientGroup"
>       table="client_group">
>       <field-descriptor
>               name="objectId"
>               column="group_id"
>               jdbc-type="INTEGER"
>               primarykey="true"
>               autoincrement="true"
>               access="readonly"
>       />
>       <field-descriptor
>               name="clientRelationshipId"
>               column="client_id"
>               jdbc-type="INTEGER"
>       />      
>       <field-descriptor
>               name="name"
>               column="NAME"
>               jdbc-type="VARCHAR"
>       />
>       <field-descriptor
>               name="ojbConcreteClass"
>               column="CLASS_NAME"
>               jdbc-type="VARCHAR"
>       />
>       <reference-descriptor name="clientRelationship"
> class-ref="model.client.ClientRelationship">
>               <foreignkey field-ref="objectId"/>
>       </reference-descriptor>                                         
> </class-descriptor>
> </descriptor-repository>
> 
> And here is my code:
> 
>               Query q = new QueryByCriteria(ClientRelationship.class);
>               Collection clientRelationships =
broker.getCollectionByQuery(q);
>               Iterator i = clientRelationships.iterator();
> 
>               writer.println("<br><br>");
>               
>               while (i.hasNext()) {
>                       ClientRelationship cr = (ClientRelationship)
> i.next();
>       
> writer.println(cr.getNameOfApproverOfNoContract() + "<br>\n");
>                       List clientGroups = cr.getClientGroups();
>                       Iterator gi = clientGroups.iterator();
>                       while (gi.hasNext()) {
>                               NewClientGroup ncg = (NewClientGroup)
> gi.next();
>                               writer.println("&nbsp;&nbsp;&nbsp;" +
> ncg.getName() + "<br>\n");
>                       }
>               }
> 
> When I run this code, here is the error:
> 
> [3/23/05 11:19:33:220 CST] 6c8a022d WebGroup      I SRVE0180I:
> [CollapsedTwo] [/CollapsedTwo] [Servlet.LOG]:
> servlets.InheritanceServlet: init
> [3/23/05 11:19:34:982 CST] 6c8a022d SystemOut     O
> [org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG:

> SQL:SELECT A0.agr_approver,A0.client_id FROM client A0 [3/23/05
> 11:19:35:012 CST] 6c8a022d ConnectionFac I J2CA0122I: Resource 
> reference jdbc/ao79 could not be located, so default values of the 
> following are used: [Resource-ref settings]
> 
>       res-auth:                 1 (APPLICATION)
>       res-isolation-level:      0 (TRANSACTION_NONE)
>       res-sharing-scope:        true (SHAREABLE)
>       res-resolution-control:   999 (undefined)
> [Other attributes]
> 
> isCMP1_x:                 false (not CMP1.x)
> isJMS:                 false (not JMS)
> 
> [3/23/05 11:19:35:212 CST] 6c8a022d SystemOut     O
> [org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG:

> SQL:SELECT A0.CLASS_NAME,A0.group_id,A0.NAME,A0.client_id FROM
> client_group A0 WHERE ( A0.client_id = ?) AND  (A0.CLASS_NAME = ?)
> [3/23/05 11:19:35:222 CST] 6c8a022d SystemOut     O [PersistentField]
> ERROR: while set field:
> [try to set 'object value' in 'target object'
> target obj class: model.client.NewClientGroup
> target field name: clientRelationship
> target field type: class model.client.ClientRelationship
> object value class: model.client.NewClientGroup
> object value: [EMAIL PROTECTED]
> ]
> org.apache.ojb.broker.metadata.MetadataException: IllegalAccess error
> setting field:clientRelationship in object:model.client.NewClientGroup
>       at
>
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessIm
> plNew.setValueFor(Unknown Source)
>       at
>
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessIm
> plNew.set(Unknown Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReference(Unknow
> n Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReferences(Unkno
> wn Source)
>       at
>
org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(Unkn
> own Source)
>       at org.apache.ojb.broker.accesslayer.RsIterator.next(Unknown
> Source)
>       at
>
org.apache.ojb.broker.accesslayer.BasePrefetcher.prefetchRelationship(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.performRetrievalTasks(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       at
>
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
> ery(Unknown Source)
>       at
>
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
> ery(Unknown Source)
>       at
> servlets.InheritanceServlet.printGroups(InheritanceServlet.java:123)
>       at
> servlets.InheritanceServlet.doPost(InheritanceServlet.java:75)
>       at servlets.InheritanceServlet.doGet(InheritanceServlet.java:44)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictSe
> rvletInstance.java:110)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLi
> fecycleServlet.java:174)
>       at
>
com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycle
> Servlet.java:313)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLif
> ecycleServlet.java:116)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.
> java:283)
>       at
>
com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(Vali
> dServletReferenceState.java:42)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(Servle
> tInstanceReference.java:40)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispa
> tch(WebAppRequestDispatcher.java:948)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRe
> questDispatcher.java:530)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppReq
> uestDispatcher.java:176)
>       at
>
com.ibm.ws.webcontainer.servlet.InvokerServlet.service(InvokerServlet.ja
> va:255)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictSe
> rvletInstance.java:110)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLi
> fecycleServlet.java:174)
>       at
>
com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycle
> Servlet.java:313)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLif
> ecycleServlet.java:116)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.
> java:283)
>       at
>
com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(Vali
> dServletReferenceState.java:42)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(Servle
> tInstanceReference.java:40)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispa
> tch(WebAppRequestDispatcher.java:948)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRe
> questDispatcher.java:530)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppReq
> uestDispatcher.java:176)
>       at
>
com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:7
> 9)
>       at
>
com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInv
> oker.java:201)
>       at
>
com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocati
> on(CachedInvocation.java:71)
>       at
>
com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(Servle
> tRequestProcessor.java:182)
>       at
>
com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSELis
> tener.java:334)
>       at
>
com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection
> .java:56)
>       at
>
com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:
> 610)
>       at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:431)
>       at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)
> Caused by: java.lang.IllegalArgumentException: field type mismatch
>       at java.lang.reflect.Field.set(Native Method)
>       ... 50 more
> [3/23/05 11:19:35:242 CST] 6c8a022d WebGroup      E SRVE0026E:
[Servlet
> Error]-[servlets.InheritanceServlet]:
> org.apache.ojb.broker.PersistenceBrokerException:
> org.apache.ojb.broker.metadata.MetadataException: IllegalAccess error 
> setting field:clientRelationship in object:model.client.NewClientGroup
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       at
>
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
> ery(Unknown Source)
>       at
>
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
> ery(Unknown Source)
>       at
> servlets.InheritanceServlet.printGroups(InheritanceServlet.java:123)
>       at
> servlets.InheritanceServlet.doPost(InheritanceServlet.java:75)
>       at servlets.InheritanceServlet.doGet(InheritanceServlet.java:44)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictSe
> rvletInstance.java:110)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLi
> fecycleServlet.java:174)
>       at
>
com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycle
> Servlet.java:313)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLif
> ecycleServlet.java:116)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.
> java:283)
>       at
>
com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(Vali
> dServletReferenceState.java:42)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(Servle
> tInstanceReference.java:40)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispa
> tch(WebAppRequestDispatcher.java:948)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRe
> questDispatcher.java:530)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppReq
> uestDispatcher.java:176)
>       at
>
com.ibm.ws.webcontainer.servlet.InvokerServlet.service(InvokerServlet.ja
> va:255)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictSe
> rvletInstance.java:110)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLi
> fecycleServlet.java:174)
>       at
>
com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycle
> Servlet.java:313)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLif
> ecycleServlet.java:116)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.
> java:283)
>       at
>
com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(Vali
> dServletReferenceState.java:42)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(Servle
> tInstanceReference.java:40)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispa
> tch(WebAppRequestDispatcher.java:948)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRe
> questDispatcher.java:530)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppReq
> uestDispatcher.java:176)
>       at
>
com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:7
> 9)
>       at
>
com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInv
> oker.java:201)
>       at
>
com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocati
> on(CachedInvocation.java:71)
>       at
>
com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(Servle
> tRequestProcessor.java:182)
>       at
>
com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSELis
> tener.java:334)
>       at
>
com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection
> .java:56)
>       at
>
com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:
> 610)
>       at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:431)
>       at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)
> Caused by: org.apache.ojb.broker.metadata.MetadataException:
> IllegalAccess error setting field:clientRelationship in 
> object:model.client.NewClientGroup
>       at
>
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessIm
> plNew.setValueFor(Unknown Source)
>       at
>
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessIm
> plNew.set(Unknown Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReference(Unknow
> n Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReferences(Unkno
> wn Source)
>       at
>
org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(Unkn
> own Source)
>       at org.apache.ojb.broker.accesslayer.RsIterator.next(Unknown
> Source)
>       at
>
org.apache.ojb.broker.accesslayer.BasePrefetcher.prefetchRelationship(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.performRetrievalTasks(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       ... 41 more
> Caused by: java.lang.IllegalArgumentException: field type mismatch
>       at java.lang.reflect.Field.set(Native Method)
>       ... 50 more
> 
> [3/23/05 11:19:35:493 CST] 6c8a022d OSEListenerDi E PLGN0021E: Servlet

> Request Processor Exception: Virtual Host/WebGroup Not Found : The web

> group /favicon.ico has not been defined
> 
> 
> Does anyone know why I am getting this error?
> 
> -----Original Message-----
> From: Lemke, Wesley
> Sent: Wednesday, March 23, 2005 10:31 AM
> To: 'OJB Users List'
> Subject: RE: Updating instead of Inserting
> 
> 
> I still am unable to retrieve objects from the database.  I've stepped

> through the code, but am having problems understanding what is going
> on.
> 
> At line 158 of
> org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccess
> Im
> plNew.java setValueFor() is being called with the Field's name =
> clientRelationship, and the type=Class
model.client.ClientRelationship.
> However, the target and value objects are the same object (they have
the
> same id), and are type NewClientGroup.
> 
> Shouldn't the target and value objects be of type ClientRelationship?
> 
> The other thing I noticed is the second time I run my code I don't get

> an exception, but I also don't get the NewClientGroups.  I'm assuming
> this has something to do with the caching...
> 
> -----Original Message-----
> From: Lemke, Wesley
> Sent: Tuesday, March 22, 2005 12:55 PM
> To: 'OJB Users List'
> Subject: RE: Updating instead of Inserting
> 
> 
> I am persisting the objects fine now, but I am getting an error when
> retrieving:
> 
> [3/22/05 12:44:43:008 CST] 39432342 SystemOut     O [PersistentField]
> ERROR: while set field:
> [try to set 'object value' in 'target object'
> target obj class: model.client.NewClientGroup
> target field name: clientRelationship
> target field type: class model.client.ClientRelationship object value 
> class: model.client.NewClientGroup object value: 
> [EMAIL PROTECTED]
> ]
> 
> Here are the pertinent parts of repository.xml:
> 
> In the class-descriptor for ClientRelationship:
>       <collection-descriptor
>               name="clientGroups"
>               element-class-ref="model.client.NewClientGroup"
>               auto-delete="true"
>               auto-update="true"
>       >
>               <inverse-foreignkey field-ref="clientRelationshipId" />
>       </collection-descriptor>
> 
> In the class-descriptor for NewClientGroup:
>       <reference-descriptor name="clientRelationship"
> class-ref="model.client.ClientRelationship">
>               <foreignkey field-ref="objectId"/>
>       </reference-descriptor> 
> 
> In the NewClientGroup Class:
>       private ClientRelationship clientRelationship;  // with getter
and 
> setter defined.
> 
> Here is the code I am running:
> 
>                       Query q = new
> QueryByCriteria(ClientRelationship.class);
>                       Collection clientRelationships =
broker.getCollectionByQuery(q); 
> <-- exception thrown here.
>                       Iterator i = clientRelationships.iterator();
> 
>                       writer.println("<br><br>");
>                       while (i.hasNext()) {
>                               ClientRelationship cr2 =
> (ClientRelationship) i.next();
>       
> writer.println(cr2.getNameOfApproverOfNoContract());
>                               List clientGroups =
> cr2.getClientGroups();
>                       }               
> 
> I am assuming that when OJB pulls back the ClientRelationships, it is
> also pulling back the collection of NewClientGroups (and Subgroups). 
> When it instantiates the NewClientGroup it is trying to set the 
> clientRelationship field.  Why is it trying to set it to a 
> NewClientGroup, instead of the associated ClientRelationship?
> 
> Here is the entire stack trace if it helps:
> 
> [3/22/05 12:44:42:998 CST] 39432342 SystemOut     O
> [org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG:

> SQL:SELECT
> A0.CLASS_NAME,A0.client_grp_id,A0.INN_CLIENT_NB,A0.client_id,A0.LAST_M
> OD
>
IFIED_USER,A0.SDD_COMP_I,A0.LAST_NAME_DT,A0.ETL_CLIENT_ID,A0.KEY_WORDS,A
>
0.LAST_NAME,A0.MAIL_MEMBERS,A0.PRIMARY_GRP_I,A0.group_id,A0.COMMENTS,A0.
> REPORTS_DESC,A0.EFF_DT,A0.NAME FROM client_group A0 WHERE (
A0.client_id
> = ?) AND  (A0.CLASS_NAME = ?)
> [3/22/05 12:44:43:078 CST] 39432342 SystemErr     R
> org.apache.ojb.broker.metadata.MetadataException: IllegalAccess error 
> setting field:clientRelationship in object:model.client.NewClientGroup
>       at
>
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessIm
> plNew.setValueFor(Unknown Source)
>       at
>
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessIm
> plNew.set(Unknown Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReference(Unknow
> n Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReferences(Unkno
> wn Source)
>       at
>
org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(Unkn
> own Source)
>       at org.apache.ojb.broker.accesslayer.RsIterator.next(Unknown
> Source)
>       at
>
org.apache.ojb.broker.accesslayer.BasePrefetcher.prefetchRelationship(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.performRetrievalTasks(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       at
>
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
> ery(Unknown Source)
>       at
>
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
> ery(Unknown Source)
>       at
> servlets.InheritanceServlet.doPost(InheritanceServlet.java:79)
>       at servlets.InheritanceServlet.doGet(InheritanceServlet.java:44)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictSe
> rvletInstance.java:110)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLi
> fecycleServlet.java:174)
>       at
>
com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycle
> Servlet.java:313)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLif
> ecycleServlet.java:116)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.
> java:283)
>       at
>
com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(Vali
> dServletReferenceState.java:42)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(Servle
> tInstanceReference.java:40)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispa
> tch(WebAppRequestDispatcher.java:948)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRe
> questDispatcher.java:530)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppReq
> uestDispatcher.java:176)
>       at
>
com.ibm.ws.webcontainer.servlet.InvokerServlet.service(InvokerServlet.ja
> va:255)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictSe
> rvletInstance.java:110)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLi
> fecycleServlet.java:174)
>       at
>
com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycle
> Servlet.java:313)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLif
> ecycleServlet.java:116)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.
> java:283)
>       at
>
com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(Vali
> dServletReferenceState.java:42)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(Servle
> tInstanceReference.java:40)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispa
> tch(WebAppRequestDispatcher.java:948)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRe
> questDispatcher.java:530)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppReq
> uestDispatcher.java:176)
>       at
>
com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:7
> 9)
>       at
>
com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInv
> oker.java:201)
>       at
>
com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocati
> on(CachedInvocation.java:71)
>       at
>
com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(Servle
> tRequestProcessor.java:182)
>       at
>
com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSELis
> tener.java:334)
>       at
>
com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection
> .java:56)
>       at
>
com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:
> 610)
>       at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:431)
>       at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)
> Caused by: java.lang.IllegalArgumentException: field type mismatch
>       at java.lang.reflect.Field.set(Native Method)
>       ... 49 more
> [3/22/05 12:44:43:008 CST] 39432342 SystemOut     O [PersistentField]
> ERROR: while set field:
> [try to set 'object value' in 'target object'
> target obj class: model.client.NewClientGroup
> target field name: clientRelationship
> target field type: class model.client.ClientRelationship
> object value class: model.client.NewClientGroup
> object value: [EMAIL PROTECTED]
> ]
> [3/22/05 12:44:47:865 CST] 39432342 WebGroup      E SRVE0026E:
[Servlet
> Error]-[servlets.InheritanceServlet]:
> org.apache.ojb.broker.PersistenceBrokerException:
> org.apache.ojb.broker.metadata.MetadataException: IllegalAccess error 
> setting field:clientRelationship in object:model.client.NewClientGroup
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       at
>
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
> ery(Unknown Source)
>       at
>
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
> ery(Unknown Source)
>       at
> servlets.InheritanceServlet.doPost(InheritanceServlet.java:79)
>       at servlets.InheritanceServlet.doGet(InheritanceServlet.java:44)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictSe
> rvletInstance.java:110)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLi
> fecycleServlet.java:174)
>       at
>
com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycle
> Servlet.java:313)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLif
> ecycleServlet.java:116)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.
> java:283)
>       at
>
com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(Vali
> dServletReferenceState.java:42)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(Servle
> tInstanceReference.java:40)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispa
> tch(WebAppRequestDispatcher.java:948)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRe
> questDispatcher.java:530)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppReq
> uestDispatcher.java:176)
>       at
>
com.ibm.ws.webcontainer.servlet.InvokerServlet.service(InvokerServlet.ja
> va:255)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictSe
> rvletInstance.java:110)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLi
> fecycleServlet.java:174)
>       at
>
com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycle
> Servlet.java:313)
>       at
>
com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLif
> ecycleServlet.java:116)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.
> java:283)
>       at
>
com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(Vali
> dServletReferenceState.java:42)
>       at
>
com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(Servle
> tInstanceReference.java:40)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispa
> tch(WebAppRequestDispatcher.java:948)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRe
> questDispatcher.java:530)
>       at
>
com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppReq
> uestDispatcher.java:176)
>       at
>
com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:7
> 9)
>       at
>
com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInv
> oker.java:201)
>       at
>
com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocati
> on(CachedInvocation.java:71)
>       at
>
com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(Servle
> tRequestProcessor.java:182)
>       at
>
com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSELis
> tener.java:334)
>       at
>
com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection
> .java:56)
>       at
>
com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:
> 610)
>       at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:431)
>       at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)
> Caused by: org.apache.ojb.broker.metadata.MetadataException:
> IllegalAccess error setting field:clientRelationship in 
> object:model.client.NewClientGroup
>       at
>
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessIm
> plNew.setValueFor(Unknown Source)
>       at
>
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessIm
> plNew.set(Unknown Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReference(Unknow
> n Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReferences(Unkno
> wn Source)
>       at
>
org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(Unkn
> own Source)
>       at org.apache.ojb.broker.accesslayer.RsIterator.next(Unknown
> Source)
>       at
>
org.apache.ojb.broker.accesslayer.BasePrefetcher.prefetchRelationship(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.performRetrievalTasks(Un
> known Source)
>       at
>
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk
> nown Source)
>       ... 40 more
> Caused by: java.lang.IllegalArgumentException: field type mismatch
>       at java.lang.reflect.Field.set(Native Method)
>       ... 49 more
> 
> -----Original Message-----
> From: Armin Waibel [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, March 22, 2005 9:22 AM
> To: OJB Users List
> Subject: Re: Updating instead of Inserting
> 
> 
> Lemke, Wesley wrote:
> 
>>Thanks Armen, that worked.  I've made this same mistake before, you 
>>would think I'd learn :)
>>
> 
> 
> ...you are in good company, the history of mankind is an endless list
> of
> 
> repeated mistakes ;-)
> 
> 
> 
>>The AdmObject will have many more extents in the full application.
>>Every persistent class will extend it, or a subclass of it.  I only 
>>had one class extending it in this subset.
>>
> 
> 
> I ask this each time, because using inheritance can be a performance 
> killer and should be avoided if possible. So if you don't regular need

> query for AdmObject's, don't declare the mapping.
> 
> Armin
> 
> 
> 
>>-----Original Message-----
>>From: Armin Waibel [mailto:[EMAIL PROTECTED]
>>Sent: Tuesday, March 22, 2005 8:38 AM
>>To: OJB Users List
>>Subject: Re: Updating instead of Inserting
>>
>>
>>Hi Wes,
>>
>>why did you need mapping for AdmObject when only one class "extent"
>>AdmObject?
>>
>>In mapping for NCG
>>
>><collection-descriptor
>>              name="subgroups"
>>              element-class-ref="model.client.Subgroup"
>>              auto-delete="true"
>>              auto-update="true"
>>      >
>>              <inverse-foreignkey field-ref="objectId" />
>>      </collection-descriptor>
>>
>>the inverse-foreignkey refer to the PK field of SG. Think this is not
>>correct, you need a FK field in SG to store the PK value of NCG. This
> 
> FK
> 
>>field must also be used by the 'clientGroup' reference in SG [don't 
>>use an anomymous field, because of the 1:n relation 
>>http://db.apache.org/ojb/docu/guides/advanced-technique.html#How+do+
>>]
>>
>>regards,
>>Armin
>>
>>
>>
>>Lemke, Wesley wrote:
>>
>>
>>>I have 4 classes:
>>>
>>>AdmObject -- highlevel class that all of our persistent classes
>>>extend. Contains objectId field. Generic Group -- Abstract.  Extends 
>>>AdmObject.  Contains common fields for NewClientGroup and Subgroup 
>>>and
>>
>>
>>>the ojbConcreteClass. NewClientGroup -- extends Generic Group,
>>>contains a collection of Subgroups. Subgroup -- extends Generic 
>>>Group.  Has a reference to the NewClientGroup.
>>>
>>>I am trying to persist NewClientGroup and Subgroup (along with common

>>>fields in Generic Group) to the same table.  Here is a portion of my
>>>mapping document (most of the common fields from Generic group are 
>>>removed to simplifiy):
>>>
>>><class-descriptor
>>>     class="model.AdmObject">
>>>     <extent-class class-ref="model.client.GenericGroup" />
>>></class-descriptor>
>>>
>>><class-descriptor
>>>     class="model.client.GenericGroup">
>>>     <extent-class class-ref="model.client.Subgroup" />
>>>     <extent-class class-ref="model.client.NewClientGroup" />
>>></class-descriptor>
>>>
>>><class-descriptor
>>>     class="model.client.NewClientGroup"
>>>     table="client_group">
>>>     <field-descriptor
>>>             name="objectId"
>>>             column="group_id"
>>>             jdbc-type="INTEGER"
>>>             primarykey="true"
>>>             autoincrement="true"
>>>             access="readonly"
>>>     />
>>>     <field-descriptor
>>>             name="internalClientNumber"
>>>             column="INN_CLIENT_NB"
>>>             jdbc-type="VARCHAR"
>>>     />
>>>     <field-descriptor
>>>             name="ojbConcreteClass"
>>>             column="CLASS_NAME"
>>>             jdbc-type="VARCHAR"
>>>     />      
>>>     <collection-descriptor
>>>             name="subgroups"
>>>             element-class-ref="model.client.Subgroup"
>>>             auto-delete="true"
>>>             auto-update="true"
>>>     >
>>>             <inverse-foreignkey field-ref="objectId" />
>>>     </collection-descriptor>        
>>></class-descriptor>
>>><class-descriptor
>>>     class="model.client.Subgroup"
>>>     table="client_group"
>>>     >
>>>     <field-descriptor
>>>             name="objectId"
>>>             column="group_id"
>>>             jdbc-type="INTEGER"
>>>             primarykey="true"
>>>             autoincrement="true"
>>>             access="readonly"
>>>     />
>>>     <field-descriptor
>>>             name="name"
>>>             column="NAME"
>>>             jdbc-type="VARCHAR"
>>>     />      
>>>     <field-descriptor
>>>             name="ojbConcreteClass"
>>>             column="CLASS_NAME"
>>>             jdbc-type="VARCHAR"
>>>     />      
>>>     <reference-descriptor name="clientGroup"
>>>class-ref="model.client.NewClientGroup">
>>>             <foreignkey field-ref="objectId"/>
>>>     </reference-descriptor>                 
>>></class-descriptor>
>>>
>>>Here is the code I am using:
>>>                     broker.beginTransaction();
>>>                     NewClientGroup ncg = new NewClientGroup();
>>>                     ncg.setInternalClientNumber("IntClntNbr");
>>>                     Subgroup sg = new Subgroup();
>>>                     sg.setName("FirstSubgroup");
>>>                     ncg.addSubgroup(sg);
>>>                     Subgroup sg2 = new Subgroup();
>>>                     sg.setName("Second Subgroup");
>>>                     ncg.addSubgroup(sg2);
>>>                     broker.store(ncg);
>>>                     broker.commitTransaction();
>>>
>>>I would assume that after the above code, there would be one
>>>NewClientGroup and 2 Subgroups in my client_group table.  However, 
>>>there is only one row, the Second Subgroup.  Here is the debug SQL
>>>generated:
>>>
>>>DEBUG: SQL:INSERT INTO client_group (INN_CLIENT_NB,CLASS_NAME) VALUES
>>>(?,?)
>>>DEBUG: SQL:UPDATE client_group SET NAME=?,CLASS_NAME=? WHERE group_id
>>
>>=
>>
>>
>>>?
>>>
>>>Am I doing something wrong with my mapping or code?  Is it possible
>>>to
>>
>>
>>>persist these classes to the same table?
>>>
>>>Any help would be appreciated.
>>>
>>>Thanks,
>>>Wes
>>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to