Re: AW: AW: AW: Two 1:N mappings to one table

2004-01-15 Thread Brian McCallister
Ah hah! You are allowing DB2 to add the ID via a trigger, aren't you? 
OJB doesn't play super nicely with the database doing that for it 
behind the scenes, unfortunately. If you are allowed, try using one of 
the OJB auto increment modules. I suggest the one that pulls from a db 
sequence if that is what you are using in DB2 now. Basically it will 
have OJB pull from the sequence and populate the id prior to the insert 
so that OJB knows the id.

-Brian

On Jan 15, 2004, at 10:25 AM, Dirk Manske (Service Respond) wrote:

Unfortunately I cannot provide a testcase for this. But in general, 
after I
stored the activity with pm.store(venture), the second operation
pm.store(person) should automagically update activity and not save it 
as a
new entry, right? Or will it be only updated, if the activityId is 
known?
Because I use DB2 with autoincrement for pk's and therefore on the 
first
store operation I have no id yet. hm. any idea?

Dirk

-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Donnerstag, 15. Januar 2004 04:28
An: OJB Users List
Betreff: Re: AW: AW: Two 1:N mappings to one table
Hmm, fun one. I suspect you may have run into the weird edge case.

I don't have an immediate answer on this -- need to play and dig.

Anyone else hit this before? Any chance you can create a unit test that
demonstrates the behavior? If so send it to me and I'll check it in 
and dig
in (or start prodding).

-Brian

On Jan 14, 2004, at 1:21 PM, Dirk Manske (Service Respond) wrote:

Hi Brian,

exactly. Due to copy  paste I assigned a wrong column to the
attribute activityId in class Person. But know I experience the
problem, that each created activity is stored twice (with different
id's). I mean, I know why, I add activity once to the 'person
collection' and to the 'venture collection' and do then
pm.store(venture) and pm.store(person). I guess I have to follow a
different approach?! Say, store first venture, then retrieve activity
to store it with person? or how does it work?
thx,
Dirk
-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Mittwoch, 14. Januar 2004 18:33
An: OJB Users List
Betreff: Re: AW: Two 1:N mappings to one table
It sounds like there is actually a problem in the mapping from class
- table where the activityId is listed.
Any chance you could post the full mapping for these classes, along
with the database schema?
-Brian

On Jan 14, 2004, at 11:33 AM, Dirk Manske (Service Respond) wrote:

Hi,

yes, i am using pb.  Setting auto-retrieve=true in the
collection-descriptor has not the desired effect, I still get the
following two strange error messages:
within browser it shows a null pointer execption for Venture when it
tried to retrieve all venture objects associated with activity and in
the tomcat console I get a SQL Exception for class PERSON, state that
activityId is not valid in the context where it is used (db2 database
error message).
When I set auto-retrieve=false for PERSON in the
reference-descriptor of class ACTIVITY, the venture objects are
retrieved. no error message.
everything works fine, except - of course I have no person objects
then.
any idea?

Dirk



-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Mittwoch, 14. Januar 2004 15:13
An: OJB Users List
Betreff: Re: Two 1:N mappings to one table
Mapping to 1:N's to the same table is fine, heack mapping 1:N's form
one class to itself multiple times works fine.
 From looking at your configs I will venture that you are using the
PB API and one of the collections isn't loading -- try setting
auto-retrieve on the collections, or (these are exclusive) try using
the ODMG API (which will retrieve them automagically)
-Brian

On Jan 13, 2004, at 7:58 PM, Dirk Manske wrote:

Hi,

how can I map two tables with each having a 1:N relation to the same
table?
I always get a null pointer exception for class Person.
I have three tables:

PERSON with a 1:N relation to ACTIVITY

and

VENTURE with a 1:N relation to ACTIVITY

Table PERSON and VENTURE both references activityId from table
ACTIVITY. In the repository-user.xml for each table which relates to
ACTIVITY the collection-descriptor is setup
for table VENTURE:

collection-descriptor
name=allAssignedActivities
element-class-ref=de.plato.Activity
orderBy=activityId
sort=DESC
auto-update=true 
inverse-foreignkey field-ref=ventureId /
/collection-descriptor
and for table PERSON:

collection-descriptor
name=allAssignedActivities
element-class-ref=de.plato.Activity
orderBy=activityId
sort=DESC
auto-update=true 
inverse-foreignkey field-ref=personId / /collection-descriptor
for ACTIVITY, both tables are referenced:

reference-descriptor name=person class-ref=de.plato.Person
refresh=true
auto-retrieve=true
foreign-key field-ref=personId /
and

reference-descriptor name=venture class-ref=de.plato.Venture
refresh=true
auto-retrieve=true
foreign-key field-ref=ventureId /
Unfortunately

AW: AW: AW: AW: Two 1:N mappings to one table

2004-01-15 Thread Dirk Manske (Service Respond)
hm. our db2 database tables are configured with an autoincrement for the
primary keys by default. (for exampl: activityId INTEGER NOT NULL GENERATED
BY DEFAULT AS IDENTITY (STARTS WITH 1, INCREMENT BY 1, NO CACHE, PRIMARY
KEY).  this is my first time using ojb. Meanwhile I get aware of what ojb
can all do for me. In the repository-user.xml I set every pk column with
primarykey=true and autoincrement=true for declarative reasons,
because I thought OJB must get to know which columns in db2 are set to
pk's... Now I am wondering if the best practice would be to set up the
physical database with no pk's, fk's etc at all and declare everything in
the repository and let ojb control it? 

Furthermore I  already declared a high/low sequence manager in the
repository without actually knowing what I was doing (I copied it from
somewhere). So please could you tell me what happend behind the scenes? I
guess OJB generated an id and tried to store it with the object but then,
db2 overwrote the id via autoincrement. After the second store operation,
OJB looks for its generated id, cannot find it and stores it as a new
activity instead of updating it. hm. what would be the best advised? I
haven't asked yet but I am pretty sure that I am not allowed to set
autoincrement off in db2, because other apps might use these tables as
well...

-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED] 
Gesendet: Donnerstag, 15. Januar 2004 16:44
An: OJB Users List
Betreff: Re: AW: AW: AW: Two 1:N mappings to one table

Ah hah! You are allowing DB2 to add the ID via a trigger, aren't you? 
OJB doesn't play super nicely with the database doing that for it behind the
scenes, unfortunately. If you are allowed, try using one of the OJB auto
increment modules. I suggest the one that pulls from a db sequence if that
is what you are using in DB2 now. Basically it will have OJB pull from the
sequence and populate the id prior to the insert so that OJB knows the id.

-Brian

On Jan 15, 2004, at 10:25 AM, Dirk Manske (Service Respond) wrote:

 Unfortunately I cannot provide a testcase for this. But in general, 
 after I stored the activity with pm.store(venture), the second 
 operation
 pm.store(person) should automagically update activity and not save it 
 as a new entry, right? Or will it be only updated, if the activityId 
 is known?
 Because I use DB2 with autoincrement for pk's and therefore on the 
 first store operation I have no id yet. hm. any idea?

 Dirk

 -Ursprüngliche Nachricht-
 Von: Brian McCallister [mailto:[EMAIL PROTECTED]
 Gesendet: Donnerstag, 15. Januar 2004 04:28
 An: OJB Users List
 Betreff: Re: AW: AW: Two 1:N mappings to one table

 Hmm, fun one. I suspect you may have run into the weird edge case.

 I don't have an immediate answer on this -- need to play and dig.

 Anyone else hit this before? Any chance you can create a unit test 
 that demonstrates the behavior? If so send it to me and I'll check it 
 in and dig in (or start prodding).

 -Brian

 On Jan 14, 2004, at 1:21 PM, Dirk Manske (Service Respond) wrote:

 Hi Brian,

 exactly. Due to copy  paste I assigned a wrong column to the 
 attribute activityId in class Person. But know I experience the 
 problem, that each created activity is stored twice (with different 
 id's). I mean, I know why, I add activity once to the 'person 
 collection' and to the 'venture collection' and do then
 pm.store(venture) and pm.store(person). I guess I have to follow a 
 different approach?! Say, store first venture, then retrieve activity 
 to store it with person? or how does it work?

 thx,
 Dirk

 -Ursprüngliche Nachricht-
 Von: Brian McCallister [mailto:[EMAIL PROTECTED]
 Gesendet: Mittwoch, 14. Januar 2004 18:33
 An: OJB Users List
 Betreff: Re: AW: Two 1:N mappings to one table

 It sounds like there is actually a problem in the mapping from class
 - table where the activityId is listed.

 Any chance you could post the full mapping for these classes, along 
 with the database schema?

 -Brian

 On Jan 14, 2004, at 11:33 AM, Dirk Manske (Service Respond) wrote:

 Hi,

 yes, i am using pb.  Setting auto-retrieve=true in the 
 collection-descriptor has not the desired effect, I still get the 
 following two strange error messages:

 within browser it shows a null pointer execption for Venture when it 
 tried to retrieve all venture objects associated with activity and 
 in the tomcat console I get a SQL Exception for class PERSON, state 
 that activityId is not valid in the context where it is used (db2 
 database error message).

 When I set auto-retrieve=false for PERSON in the 
 reference-descriptor of class ACTIVITY, the venture objects are 
 retrieved. no error message.
 everything works fine, except - of course I have no person objects 
 then.

 any idea?

 Dirk




 -Ursprüngliche Nachricht-
 Von: Brian McCallister [mailto:[EMAIL PROTECTED]
 Gesendet: Mittwoch, 14. Januar 2004 15:13
 An: OJB Users List
 Betreff: Re: Two

Re: AW: AW: AW: AW: Two 1:N mappings to one table

2004-01-15 Thread Brian McCallister
No! You misunderstood me.

Declare the PK's, FK's etc in the database. Do not abandon good  
database practices for OJB -- particularly as never know what programs  
will access the DB directly in the future.

The DB managed auto-increment is the thing that is causing OJB to  
hiccup on you, I suspect. If you do an insert specifying the PK will  
DB2 override your specified one and replace it with its generated one,  
or will it accept your specified one?

A good description of the High-Low sequence algorithm is in the  
SDMagazine issue ( http://www.sdmagazine.com/articles/1999/9912/ ) but  
it is non free. You can google for other examples =) It is an efficient  
algorithm for managing sequences, basically.

If you have some values inserted by OJB's hi-low implementation, and  
some by the database using auto-generation you risk a collision. If you  
need the database auto-generation of keys (for batch inserts via a  
different tool, or other applications for example) having the database  
pull values from a database sequence that you also have OJB pull values  
from for OJB auto increment fields is the most reliable way to do this.

http://db.apache.org/ojb/api/org/apache/ojb/broker/util/sequence/ 
SequenceManagerNextValImpl.html

Is the base implementation for OJB that works (I am told, I don't use  
DB2) with DB2 sequences.

-Brian

On Jan 15, 2004, at 11:42 AM, Dirk Manske (Service Respond) wrote:

hm. our db2 database tables are configured with an autoincrement for  
the
primary keys by default. (for exampl: activityId INTEGER NOT NULL  
GENERATED
BY DEFAULT AS IDENTITY (STARTS WITH 1, INCREMENT BY 1, NO CACHE,  
PRIMARY
KEY).  this is my first time using ojb. Meanwhile I get aware of what  
ojb
can all do for me. In the repository-user.xml I set every pk column  
with
primarykey=true and autoincrement=true for declarative reasons,
because I thought OJB must get to know which columns in db2 are set to
pk's... Now I am wondering if the best practice would be to set up the
physical database with no pk's, fk's etc at all and declare everything  
in
the repository and let ojb control it?

Furthermore I  already declared a high/low sequence manager in the
repository without actually knowing what I was doing (I copied it from
somewhere). So please could you tell me what happend behind the  
scenes? I
guess OJB generated an id and tried to store it with the object but  
then,
db2 overwrote the id via autoincrement. After the second store  
operation,
OJB looks for its generated id, cannot find it and stores it as a new
activity instead of updating it. hm. what would be the best advised? I
haven't asked yet but I am pretty sure that I am not allowed to set
autoincrement off in db2, because other apps might use these tables as
well...

-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Donnerstag, 15. Januar 2004 16:44
An: OJB Users List
Betreff: Re: AW: AW: AW: Two 1:N mappings to one table
Ah hah! You are allowing DB2 to add the ID via a trigger, aren't you?
OJB doesn't play super nicely with the database doing that for it  
behind the
scenes, unfortunately. If you are allowed, try using one of the OJB  
auto
increment modules. I suggest the one that pulls from a db sequence if  
that
is what you are using in DB2 now. Basically it will have OJB pull from  
the
sequence and populate the id prior to the insert so that OJB knows the  
id.

-Brian

On Jan 15, 2004, at 10:25 AM, Dirk Manske (Service Respond) wrote:

Unfortunately I cannot provide a testcase for this. But in general,
after I stored the activity with pm.store(venture), the second
operation
pm.store(person) should automagically update activity and not save it
as a new entry, right? Or will it be only updated, if the activityId
is known?
Because I use DB2 with autoincrement for pk's and therefore on the
first store operation I have no id yet. hm. any idea?
Dirk

-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Donnerstag, 15. Januar 2004 04:28
An: OJB Users List
Betreff: Re: AW: AW: Two 1:N mappings to one table
Hmm, fun one. I suspect you may have run into the weird edge case.

I don't have an immediate answer on this -- need to play and dig.

Anyone else hit this before? Any chance you can create a unit test
that demonstrates the behavior? If so send it to me and I'll check it
in and dig in (or start prodding).
-Brian

On Jan 14, 2004, at 1:21 PM, Dirk Manske (Service Respond) wrote:

Hi Brian,

exactly. Due to copy  paste I assigned a wrong column to the
attribute activityId in class Person. But know I experience the
problem, that each created activity is stored twice (with different
id's). I mean, I know why, I add activity once to the 'person
collection' and to the 'venture collection' and do then
pm.store(venture) and pm.store(person). I guess I have to follow a
different approach?! Say, store first venture, then retrieve activity
to store it with person

Re: AW: AW: AW: AW: Two 1:N mappings to one table

2004-01-15 Thread Armin Waibel
Hi Dirk,

if you use Identity columns from database you can't use the default 
SequenceManager (SequenceManagerHighLowImpl). Have a look in
http://db.apache.org/ojb/sequencemanager.html#nativeSequenceManager

 can all do for me. In the repository-user.xml I set every pk column with
 primarykey=true and autoincrement=true for declarative reasons,
When using SequenceManagerNativeImpl you have to set access=readonly too.

regards,
Armin
Dirk Manske (Service Respond) wrote:

hm. our db2 database tables are configured with an autoincrement for the
primary keys by default. (for exampl: activityId INTEGER NOT NULL GENERATED
BY DEFAULT AS IDENTITY (STARTS WITH 1, INCREMENT BY 1, NO CACHE, PRIMARY
KEY).  this is my first time using ojb. Meanwhile I get aware of what ojb
can all do for me. In the repository-user.xml I set every pk column with
primarykey=true and autoincrement=true for declarative reasons,
because I thought OJB must get to know which columns in db2 are set to
pk's... Now I am wondering if the best practice would be to set up the
physical database with no pk's, fk's etc at all and declare everything in
the repository and let ojb control it? 

Furthermore I  already declared a high/low sequence manager in the
repository without actually knowing what I was doing (I copied it from
somewhere). So please could you tell me what happend behind the scenes? I
guess OJB generated an id and tried to store it with the object but then,
db2 overwrote the id via autoincrement. After the second store operation,
OJB looks for its generated id, cannot find it and stores it as a new
activity instead of updating it. hm. what would be the best advised? I
haven't asked yet but I am pretty sure that I am not allowed to set
autoincrement off in db2, because other apps might use these tables as
well...
-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED] 
Gesendet: Donnerstag, 15. Januar 2004 16:44
An: OJB Users List
Betreff: Re: AW: AW: AW: Two 1:N mappings to one table

Ah hah! You are allowing DB2 to add the ID via a trigger, aren't you? 
OJB doesn't play super nicely with the database doing that for it behind the
scenes, unfortunately. If you are allowed, try using one of the OJB auto
increment modules. I suggest the one that pulls from a db sequence if that
is what you are using in DB2 now. Basically it will have OJB pull from the
sequence and populate the id prior to the insert so that OJB knows the id.

-Brian

On Jan 15, 2004, at 10:25 AM, Dirk Manske (Service Respond) wrote:


Unfortunately I cannot provide a testcase for this. But in general, 
after I stored the activity with pm.store(venture), the second 
operation
pm.store(person) should automagically update activity and not save it 
as a new entry, right? Or will it be only updated, if the activityId 
is known?
Because I use DB2 with autoincrement for pk's and therefore on the 
first store operation I have no id yet. hm. any idea?

Dirk

-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Donnerstag, 15. Januar 2004 04:28
An: OJB Users List
Betreff: Re: AW: AW: Two 1:N mappings to one table
Hmm, fun one. I suspect you may have run into the weird edge case.

I don't have an immediate answer on this -- need to play and dig.

Anyone else hit this before? Any chance you can create a unit test 
that demonstrates the behavior? If so send it to me and I'll check it 
in and dig in (or start prodding).

-Brian

On Jan 14, 2004, at 1:21 PM, Dirk Manske (Service Respond) wrote:


Hi Brian,

exactly. Due to copy  paste I assigned a wrong column to the 
attribute activityId in class Person. But know I experience the 
problem, that each created activity is stored twice (with different 
id's). I mean, I know why, I add activity once to the 'person 
collection' and to the 'venture collection' and do then
pm.store(venture) and pm.store(person). I guess I have to follow a 
different approach?! Say, store first venture, then retrieve activity 
to store it with person? or how does it work?

thx,
Dirk
-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Mittwoch, 14. Januar 2004 18:33
An: OJB Users List
Betreff: Re: AW: Two 1:N mappings to one table
It sounds like there is actually a problem in the mapping from class
- table where the activityId is listed.
Any chance you could post the full mapping for these classes, along 
with the database schema?

-Brian

On Jan 14, 2004, at 11:33 AM, Dirk Manske (Service Respond) wrote:


Hi,

yes, i am using pb.  Setting auto-retrieve=true in the 
collection-descriptor has not the desired effect, I still get the 
following two strange error messages:

within browser it shows a null pointer execption for Venture when it 
tried to retrieve all venture objects associated with activity and 
in the tomcat console I get a SQL Exception for class PERSON, state 
that activityId is not valid in the context where it is used (db2 
database error

AW: AW: AW: AW: AW: Two 1:N mappings to one table

2004-01-15 Thread Dirk Manske (Service Respond)
thank you both. you helped me a lot in understanding ojb. I'll give it a
try.

Dirk  

-Ursprüngliche Nachricht-
Von: Armin Waibel [mailto:[EMAIL PROTECTED] 
Gesendet: Donnerstag, 15. Januar 2004 18:06
An: OJB Users List
Betreff: Re: AW: AW: AW: AW: Two 1:N mappings to one table

Hi Dirk,

if you use Identity columns from database you can't use the default
SequenceManager (SequenceManagerHighLowImpl). Have a look in
http://db.apache.org/ojb/sequencemanager.html#nativeSequenceManager

  can all do for me. In the repository-user.xml I set every pk column with
 primarykey=true and autoincrement=true for declarative reasons,

When using SequenceManagerNativeImpl you have to set access=readonly too.

regards,
Armin

Dirk Manske (Service Respond) wrote:

 hm. our db2 database tables are configured with an autoincrement for 
 the primary keys by default. (for exampl: activityId INTEGER NOT NULL 
 GENERATED BY DEFAULT AS IDENTITY (STARTS WITH 1, INCREMENT BY 1, NO 
 CACHE, PRIMARY KEY).  this is my first time using ojb. Meanwhile I get 
 aware of what ojb can all do for me. In the repository-user.xml I set 
 every pk column with primarykey=true and autoincrement=true for 
 declarative reasons, because I thought OJB must get to know which 
 columns in db2 are set to pk's... Now I am wondering if the best 
 practice would be to set up the physical database with no pk's, fk's 
 etc at all and declare everything in the repository and let ojb control
it?
 
 Furthermore I  already declared a high/low sequence manager in the 
 repository without actually knowing what I was doing (I copied it from 
 somewhere). So please could you tell me what happend behind the 
 scenes? I guess OJB generated an id and tried to store it with the 
 object but then,
 db2 overwrote the id via autoincrement. After the second store 
 operation, OJB looks for its generated id, cannot find it and stores 
 it as a new activity instead of updating it. hm. what would be the 
 best advised? I haven't asked yet but I am pretty sure that I am not 
 allowed to set autoincrement off in db2, because other apps might use 
 these tables as well...
 
 -Ursprüngliche Nachricht-
 Von: Brian McCallister [mailto:[EMAIL PROTECTED]
 Gesendet: Donnerstag, 15. Januar 2004 16:44
 An: OJB Users List
 Betreff: Re: AW: AW: AW: Two 1:N mappings to one table
 
 Ah hah! You are allowing DB2 to add the ID via a trigger, aren't you? 
 OJB doesn't play super nicely with the database doing that for it 
 behind the scenes, unfortunately. If you are allowed, try using one of 
 the OJB auto increment modules. I suggest the one that pulls from a db 
 sequence if that is what you are using in DB2 now. Basically it will 
 have OJB pull from the sequence and populate the id prior to the insert so
that OJB knows the id.
 
 -Brian
 
 On Jan 15, 2004, at 10:25 AM, Dirk Manske (Service Respond) wrote:
 
 
Unfortunately I cannot provide a testcase for this. But in general, 
after I stored the activity with pm.store(venture), the second 
operation
pm.store(person) should automagically update activity and not save it 
as a new entry, right? Or will it be only updated, if the activityId 
is known?
Because I use DB2 with autoincrement for pk's and therefore on the 
first store operation I have no id yet. hm. any idea?

Dirk

-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Donnerstag, 15. Januar 2004 04:28
An: OJB Users List
Betreff: Re: AW: AW: Two 1:N mappings to one table

Hmm, fun one. I suspect you may have run into the weird edge case.

I don't have an immediate answer on this -- need to play and dig.

Anyone else hit this before? Any chance you can create a unit test 
that demonstrates the behavior? If so send it to me and I'll check it 
in and dig in (or start prodding).

-Brian

On Jan 14, 2004, at 1:21 PM, Dirk Manske (Service Respond) wrote:


Hi Brian,

exactly. Due to copy  paste I assigned a wrong column to the 
attribute activityId in class Person. But know I experience the 
problem, that each created activity is stored twice (with different 
id's). I mean, I know why, I add activity once to the 'person 
collection' and to the 'venture collection' and do then
pm.store(venture) and pm.store(person). I guess I have to follow a 
different approach?! Say, store first venture, then retrieve activity 
to store it with person? or how does it work?

thx,
Dirk

-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Mittwoch, 14. Januar 2004 18:33
An: OJB Users List
Betreff: Re: AW: Two 1:N mappings to one table

It sounds like there is actually a problem in the mapping from class
- table where the activityId is listed.

Any chance you could post the full mapping for these classes, along 
with the database schema?

-Brian

On Jan 14, 2004, at 11:33 AM, Dirk Manske (Service Respond) wrote:


Hi,

yes, i am using pb.  Setting auto-retrieve=true in the 
collection-descriptor has

Re: AW: AW: AW: AW: AW: Two 1:N mappings to one table

2004-01-15 Thread Armin Waibel
Hi again,

if you run into trouble, you maybe need to patch PlatformDB2Impl class, 
because there was a check in of a fix by Matthias Roth after rc5.

Index: PlatformDb2Impl.java
  ===
  RCS file: 
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/platforms/PlatformDb2Impl.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- PlatformDb2Impl.java	9 Dec 2003 22:48:20 -	1.7
  +++ PlatformDb2Impl.java	19 Dec 2003 18:01:10 -	1.8
  @@ -98,9 +98,13 @@
   {
   return drop sequence  + sequenceName;
   }
  -
  -public String getLastInsertIdentityQuery(String tableName)
  -{
  -return values IDENTITY_VAL_LOCAL() fetch first row only;
  -}
  +
  +	public String getLastInsertIdentityQuery(String tableName)
  +	{
  +		// [EMAIL PROTECTED]
  +		// the function is used by the 
org.apache.ojb.broker.util.sequence.SequenceManagerNativeImpl
  +		// this call must be made before commit the insert cammand, so you
  +		// must turn off autocommit by seting the useAutoCommit=2, 1 
should work too
  +		return select IDENTITY_VAL_LOCAL() from sysibm.sysdummy1;
  +	}
   }

regards,
Armin
Dirk Manske (Service Respond) wrote:

thank you both. you helped me a lot in understanding ojb. I'll give it a
try.
Dirk  

-Ursprüngliche Nachricht-
Von: Armin Waibel [mailto:[EMAIL PROTECTED] 
Gesendet: Donnerstag, 15. Januar 2004 18:06
An: OJB Users List
Betreff: Re: AW: AW: AW: AW: Two 1:N mappings to one table

Hi Dirk,

if you use Identity columns from database you can't use the default
SequenceManager (SequenceManagerHighLowImpl). Have a look in
http://db.apache.org/ojb/sequencemanager.html#nativeSequenceManager
  can all do for me. In the repository-user.xml I set every pk column with

primarykey=true and autoincrement=true for declarative reasons,


When using SequenceManagerNativeImpl you have to set access=readonly too.

regards,
Armin
Dirk Manske (Service Respond) wrote:


hm. our db2 database tables are configured with an autoincrement for 
the primary keys by default. (for exampl: activityId INTEGER NOT NULL 
GENERATED BY DEFAULT AS IDENTITY (STARTS WITH 1, INCREMENT BY 1, NO 
CACHE, PRIMARY KEY).  this is my first time using ojb. Meanwhile I get 
aware of what ojb can all do for me. In the repository-user.xml I set 
every pk column with primarykey=true and autoincrement=true for 
declarative reasons, because I thought OJB must get to know which 
columns in db2 are set to pk's... Now I am wondering if the best 
practice would be to set up the physical database with no pk's, fk's 
etc at all and declare everything in the repository and let ojb control
it?

Furthermore I  already declared a high/low sequence manager in the 
repository without actually knowing what I was doing (I copied it from 
somewhere). So please could you tell me what happend behind the 
scenes? I guess OJB generated an id and tried to store it with the 
object but then,
db2 overwrote the id via autoincrement. After the second store 
operation, OJB looks for its generated id, cannot find it and stores 
it as a new activity instead of updating it. hm. what would be the 
best advised? I haven't asked yet but I am pretty sure that I am not 
allowed to set autoincrement off in db2, because other apps might use 
these tables as well...

-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Donnerstag, 15. Januar 2004 16:44
An: OJB Users List
Betreff: Re: AW: AW: AW: Two 1:N mappings to one table
Ah hah! You are allowing DB2 to add the ID via a trigger, aren't you? 
OJB doesn't play super nicely with the database doing that for it 
behind the scenes, unfortunately. If you are allowed, try using one of 
the OJB auto increment modules. I suggest the one that pulls from a db 
sequence if that is what you are using in DB2 now. Basically it will 
have OJB pull from the sequence and populate the id prior to the insert so
that OJB knows the id.

-Brian

On Jan 15, 2004, at 10:25 AM, Dirk Manske (Service Respond) wrote:



Unfortunately I cannot provide a testcase for this. But in general, 
after I stored the activity with pm.store(venture), the second 
operation
pm.store(person) should automagically update activity and not save it 
as a new entry, right? Or will it be only updated, if the activityId 
is known?
Because I use DB2 with autoincrement for pk's and therefore on the 
first store operation I have no id yet. hm. any idea?

Dirk

-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Donnerstag, 15. Januar 2004 04:28
An: OJB Users List
Betreff: Re: AW: AW: Two 1:N mappings to one table
Hmm, fun one. I suspect you may have run into the weird edge case.

I don't have an immediate answer on this -- need to play and dig.

Anyone else hit this before? Any chance you can create a unit test 
that demonstrates the behavior? If so send it to me and I'll check

AW: Two 1:N mappings to one table

2004-01-14 Thread Dirk Manske (Service Respond)
Hi,

yes, i am using pb.  Setting auto-retrieve=true in the
collection-descriptor has not the desired effect, I still get the following
two strange error messages:

within browser it shows a null pointer execption for Venture when it tried
to retrieve all venture objects associated with activity and in the tomcat
console I get a
SQL Exception for class PERSON, state that activityId is not valid in the
context where it is used (db2 database error message).

When I set auto-retrieve=false for PERSON in the reference-descriptor of
class ACTIVITY, the venture objects are retrieved. no error message.
everything works fine, except - of course I have no person objects then.

any idea?

Dirk 




-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED] 
Gesendet: Mittwoch, 14. Januar 2004 15:13
An: OJB Users List
Betreff: Re: Two 1:N mappings to one table

Mapping to 1:N's to the same table is fine, heack mapping 1:N's form one
class to itself multiple times works fine.

 From looking at your configs I will venture that you are using the PB API
and one of the collections isn't loading -- try setting auto-retrieve on the
collections, or (these are exclusive) try using the ODMG API (which will
retrieve them automagically)

-Brian

On Jan 13, 2004, at 7:58 PM, Dirk Manske wrote:

 Hi,

 how can I map two tables with each having a 1:N relation to the same 
 table?
 I always get a null pointer exception for class Person.

 I have three tables:

 PERSON with a 1:N relation to ACTIVITY

 and

 VENTURE with a 1:N relation to ACTIVITY

 Table PERSON and VENTURE both references activityId from table 
 ACTIVITY. In the repository-user.xml for each table which relates to 
 ACTIVITY the collection-descriptor is setup

 for table VENTURE:

 collection-descriptor
 name=allAssignedActivities
 element-class-ref=de.plato.Activity
 orderBy=activityId
 sort=DESC
 auto-update=true 
 inverse-foreignkey field-ref=ventureId / /collection-descriptor

 and for table PERSON:

 collection-descriptor
 name=allAssignedActivities
 element-class-ref=de.plato.Activity
 orderBy=activityId
 sort=DESC
 auto-update=true 
 inverse-foreignkey field-ref=personId / /collection-descriptor

 for ACTIVITY, both tables are referenced:

 reference-descriptor name=person
 class-ref=de.plato.Person
 refresh=true
 auto-retrieve=true
 foreign-key field-ref=personId /

 and

 reference-descriptor name=venture
 class-ref=de.plato.Venture
 refresh=true
 auto-retrieve=true
 foreign-key field-ref=ventureId /

 Unfortunately, this does not work. What do I have to do?

 thx,
 Dirk


 -
 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]



Re: AW: Two 1:N mappings to one table

2004-01-14 Thread Brian McCallister
It sounds like there is actually a problem in the mapping from class - 
table where the activityId is listed.

Any chance you could post the full mapping for these classes, along 
with the database schema?

-Brian

On Jan 14, 2004, at 11:33 AM, Dirk Manske (Service Respond) wrote:

Hi,

yes, i am using pb.  Setting auto-retrieve=true in the
collection-descriptor has not the desired effect, I still get the 
following
two strange error messages:

within browser it shows a null pointer execption for Venture when it 
tried
to retrieve all venture objects associated with activity and in the 
tomcat
console I get a
SQL Exception for class PERSON, state that activityId is not valid in 
the
context where it is used (db2 database error message).

When I set auto-retrieve=false for PERSON in the 
reference-descriptor of
class ACTIVITY, the venture objects are retrieved. no error message.
everything works fine, except - of course I have no person objects 
then.

any idea?

Dirk



-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Mittwoch, 14. Januar 2004 15:13
An: OJB Users List
Betreff: Re: Two 1:N mappings to one table
Mapping to 1:N's to the same table is fine, heack mapping 1:N's form 
one
class to itself multiple times works fine.

 From looking at your configs I will venture that you are using the PB 
API
and one of the collections isn't loading -- try setting auto-retrieve 
on the
collections, or (these are exclusive) try using the ODMG API (which 
will
retrieve them automagically)

-Brian

On Jan 13, 2004, at 7:58 PM, Dirk Manske wrote:

Hi,

how can I map two tables with each having a 1:N relation to the same
table?
I always get a null pointer exception for class Person.
I have three tables:

PERSON with a 1:N relation to ACTIVITY

and

VENTURE with a 1:N relation to ACTIVITY

Table PERSON and VENTURE both references activityId from table
ACTIVITY. In the repository-user.xml for each table which relates to
ACTIVITY the collection-descriptor is setup
for table VENTURE:

collection-descriptor
name=allAssignedActivities
element-class-ref=de.plato.Activity
orderBy=activityId
sort=DESC
auto-update=true 
inverse-foreignkey field-ref=ventureId / /collection-descriptor
and for table PERSON:

collection-descriptor
name=allAssignedActivities
element-class-ref=de.plato.Activity
orderBy=activityId
sort=DESC
auto-update=true 
inverse-foreignkey field-ref=personId / /collection-descriptor
for ACTIVITY, both tables are referenced:

reference-descriptor name=person
class-ref=de.plato.Person
refresh=true
auto-retrieve=true
foreign-key field-ref=personId /
and

reference-descriptor name=venture
class-ref=de.plato.Venture
refresh=true
auto-retrieve=true
foreign-key field-ref=ventureId /
Unfortunately, this does not work. What do I have to do?

thx,
Dirk
-
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]


AW: AW: Two 1:N mappings to one table

2004-01-14 Thread Dirk Manske (Service Respond)
Hi Brian,

exactly. Due to copy  paste I assigned a wrong column to the attribute
activityId in class Person. But know I experience the problem, that each
created activity is stored twice (with different id's). I mean, I know why,
I add activity once to the 'person collection' and to the 'venture
collection' and do then pm.store(venture) and pm.store(person). I guess I
have to follow a different approach?! Say, store first venture, then
retrieve activity to store it with person? or how does it work?

thx,
Dirk

-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED] 
Gesendet: Mittwoch, 14. Januar 2004 18:33
An: OJB Users List
Betreff: Re: AW: Two 1:N mappings to one table

It sounds like there is actually a problem in the mapping from class -
table where the activityId is listed.

Any chance you could post the full mapping for these classes, along with the
database schema?

-Brian

On Jan 14, 2004, at 11:33 AM, Dirk Manske (Service Respond) wrote:

 Hi,

 yes, i am using pb.  Setting auto-retrieve=true in the 
 collection-descriptor has not the desired effect, I still get the 
 following two strange error messages:

 within browser it shows a null pointer execption for Venture when it 
 tried to retrieve all venture objects associated with activity and in 
 the tomcat console I get a SQL Exception for class PERSON, state that 
 activityId is not valid in the context where it is used (db2 database 
 error message).

 When I set auto-retrieve=false for PERSON in the 
 reference-descriptor of class ACTIVITY, the venture objects are 
 retrieved. no error message.
 everything works fine, except - of course I have no person objects 
 then.

 any idea?

 Dirk




 -Ursprüngliche Nachricht-
 Von: Brian McCallister [mailto:[EMAIL PROTECTED]
 Gesendet: Mittwoch, 14. Januar 2004 15:13
 An: OJB Users List
 Betreff: Re: Two 1:N mappings to one table

 Mapping to 1:N's to the same table is fine, heack mapping 1:N's form 
 one class to itself multiple times works fine.

  From looking at your configs I will venture that you are using the PB 
 API and one of the collections isn't loading -- try setting 
 auto-retrieve on the collections, or (these are exclusive) try using 
 the ODMG API (which will retrieve them automagically)

 -Brian

 On Jan 13, 2004, at 7:58 PM, Dirk Manske wrote:

 Hi,

 how can I map two tables with each having a 1:N relation to the same 
 table?
 I always get a null pointer exception for class Person.

 I have three tables:

 PERSON with a 1:N relation to ACTIVITY

 and

 VENTURE with a 1:N relation to ACTIVITY

 Table PERSON and VENTURE both references activityId from table 
 ACTIVITY. In the repository-user.xml for each table which relates to 
 ACTIVITY the collection-descriptor is setup

 for table VENTURE:

 collection-descriptor
 name=allAssignedActivities
 element-class-ref=de.plato.Activity
 orderBy=activityId
 sort=DESC
 auto-update=true 
 inverse-foreignkey field-ref=ventureId / /collection-descriptor

 and for table PERSON:

 collection-descriptor
 name=allAssignedActivities
 element-class-ref=de.plato.Activity
 orderBy=activityId
 sort=DESC
 auto-update=true 
 inverse-foreignkey field-ref=personId / /collection-descriptor

 for ACTIVITY, both tables are referenced:

 reference-descriptor name=person
 class-ref=de.plato.Person
 refresh=true
 auto-retrieve=true
 foreign-key field-ref=personId /

 and

 reference-descriptor name=venture class-ref=de.plato.Venture
 refresh=true
 auto-retrieve=true
 foreign-key field-ref=ventureId /

 Unfortunately, this does not work. What do I have to do?

 thx,
 Dirk


 -
 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]



Re: AW: AW: Two 1:N mappings to one table

2004-01-14 Thread Brian McCallister
Hmm, fun one. I suspect you may have run into the weird edge case.

I don't have an immediate answer on this -- need to play and dig.

Anyone else hit this before? Any chance you can create a unit test that 
demonstrates the behavior? If so send it to me and I'll check it in and 
dig in (or start prodding).

-Brian

On Jan 14, 2004, at 1:21 PM, Dirk Manske (Service Respond) wrote:

Hi Brian,

exactly. Due to copy  paste I assigned a wrong column to the attribute
activityId in class Person. But know I experience the problem, that 
each
created activity is stored twice (with different id's). I mean, I know 
why,
I add activity once to the 'person collection' and to the 'venture
collection' and do then pm.store(venture) and pm.store(person). I 
guess I
have to follow a different approach?! Say, store first venture, then
retrieve activity to store it with person? or how does it work?

thx,
Dirk
-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Mittwoch, 14. Januar 2004 18:33
An: OJB Users List
Betreff: Re: AW: Two 1:N mappings to one table
It sounds like there is actually a problem in the mapping from class -
table where the activityId is listed.
Any chance you could post the full mapping for these classes, along 
with the
database schema?

-Brian

On Jan 14, 2004, at 11:33 AM, Dirk Manske (Service Respond) wrote:

Hi,

yes, i am using pb.  Setting auto-retrieve=true in the
collection-descriptor has not the desired effect, I still get the
following two strange error messages:
within browser it shows a null pointer execption for Venture when it
tried to retrieve all venture objects associated with activity and in
the tomcat console I get a SQL Exception for class PERSON, state that
activityId is not valid in the context where it is used (db2 database
error message).
When I set auto-retrieve=false for PERSON in the
reference-descriptor of class ACTIVITY, the venture objects are
retrieved. no error message.
everything works fine, except - of course I have no person objects
then.
any idea?

Dirk



-Ursprüngliche Nachricht-
Von: Brian McCallister [mailto:[EMAIL PROTECTED]
Gesendet: Mittwoch, 14. Januar 2004 15:13
An: OJB Users List
Betreff: Re: Two 1:N mappings to one table
Mapping to 1:N's to the same table is fine, heack mapping 1:N's form
one class to itself multiple times works fine.
 From looking at your configs I will venture that you are using the PB
API and one of the collections isn't loading -- try setting
auto-retrieve on the collections, or (these are exclusive) try using
the ODMG API (which will retrieve them automagically)
-Brian

On Jan 13, 2004, at 7:58 PM, Dirk Manske wrote:

Hi,

how can I map two tables with each having a 1:N relation to the same
table?
I always get a null pointer exception for class Person.
I have three tables:

PERSON with a 1:N relation to ACTIVITY

and

VENTURE with a 1:N relation to ACTIVITY

Table PERSON and VENTURE both references activityId from table
ACTIVITY. In the repository-user.xml for each table which relates to
ACTIVITY the collection-descriptor is setup
for table VENTURE:

collection-descriptor
name=allAssignedActivities
element-class-ref=de.plato.Activity
orderBy=activityId
sort=DESC
auto-update=true 
inverse-foreignkey field-ref=ventureId / /collection-descriptor
and for table PERSON:

collection-descriptor
name=allAssignedActivities
element-class-ref=de.plato.Activity
orderBy=activityId
sort=DESC
auto-update=true 
inverse-foreignkey field-ref=personId / /collection-descriptor
for ACTIVITY, both tables are referenced:

reference-descriptor name=person
class-ref=de.plato.Person
refresh=true
auto-retrieve=true
foreign-key field-ref=personId /
and

reference-descriptor name=venture class-ref=de.plato.Venture
refresh=true
auto-retrieve=true
foreign-key field-ref=ventureId /
Unfortunately, this does not work. What do I have to do?

thx,
Dirk
-
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]