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(" " +
> 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]