RE: Updating instead of Inserting

2005-03-23 Thread Lemke, Wesley
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.PersistentFieldDirectAccessIm
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(brbr);
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_MOD
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

Re: Updating instead of Inserting

2005-03-23 Thread Armin Waibel
Hi Wes,
sure that this mapping is correct?
 In the class-descriptor for NewClientGroup:
reference-descriptor name=clientRelationship
 class-ref=model.client.ClientRelationship
foreignkey field-ref=objectId/
/reference-descriptor   
I assume that objectId is still the PK field of NewClientGroup. You 
need a FK field refering to ClientRelationship. In your previous mail 
you said that you are using ojbConcrete class feature, this explains why 
you get

 [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]
 ]
field type is correct, but objectId refer to concrete class 
NewClientGroup -- bang!

regards,
Armin
Lemke, Wesley wrote:
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.PersistentFieldDirectAccessIm
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(brbr);
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_MOD
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

Re: Updating instead of Inserting

2005-03-23 Thread Jakob Braeuchi
hi wesley,
it looks like you are using th pk of NewClientGroup as fk pointing to 
ClientRelationship. imo the field 'clientRelationshipId' shouls be used 
here.

jakob
Lemke, Wesley schrieb:
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.PersistentFieldDirectAccessIm
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(brbr);
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_MOD
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

Updating instead of Inserting

2005-03-22 Thread Lemke, Wesley
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]



Re: Updating instead of Inserting

2005-03-22 Thread Armin Waibel
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]


RE: Updating instead of Inserting

2005-03-22 Thread Lemke, Wesley
Thanks Armen, that worked.  I've made this same mistake before, you
would think I'd learn :)

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.

-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

Re: Updating instead of Inserting

2005-03-22 Thread Armin Waibel
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

RE: Updating instead of Inserting

2005-03-22 Thread Lemke, Wesley
)
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