On Tue, 21 Oct 2003 09:45:29 -0400, Matt Mastrangelo
<[EMAIL PROTECTED]> wrote:

Hi Matt,

>Hi Gerhard,
>
>I'm not saying the B1 and B2 instances should extend the same instance 
>of A, but that they should be materialized from the same A record in the 
>database.  B1 and B2 would have to be different objects obviously.  I 
>think this could be quite possible in OJB.

I think OJB's concept of object identity would require these objects
to be identical, because the identity of an persistent object is
defined by its primary key and the top-level class of the extent.
(There have been discussions whether this is the best approach,
though.)

>But let me ask the question a different way - suppose I have an instance 
>of A that already exists.  Now I want to create a B1 instance that is 
>associated with the already existing A instance.  So I don't want a new 
>A record to be created, only new B1 record that "extends" the 
>pre-existing A record.  Is that possible?

That should be possible. But probably you'd have to manually copy all
attributes (including PK!) from the existing A object to the new B1
object. Then PB.store(B1) should effectively change the
ojbConcreteClass of the existing record.

Cheers,
Gerhard

>
>Thank you for your input.
>
>Matt
>
>Gerhard Grosse wrote:
>
>>Hi Matt,
>>
>>Excuse me to jump in here, but I believe what you have in mind is not
>>possible in Java and even less with OJB. If your B1 and B2 instance
>>should 'contain' the same A instance as base class, they are identical
>>objects, which would require a language that supports multiple
>>inheritance (and virtual base classes). You could do that in in C++
>>but not in Java. 
>>
>>What you can do in Java (and OJB) is declare an interface I_A
>>implemented by A, B1 and B2. I_A just declares all public methods of A
>>and in B1 and B2 you implement this interface by delegation. That is
>>in B1 and B2 you have a reference to a A object and all I_A methods on
>>B1 and B2 are just routed to this reference. That way distinct
>>instances of B1 and B2 can easily share a common A reference.
>>
>>HTH,
>>Gerhard
>>
>>On Tue, 21 Oct 2003 00:27:02 -0400, Matt Mastrangelo
>><[EMAIL PROTECTED]> wrote:
>>
>>  
>>
>>>Chris,
>>>
>>>Just to clarify -- are you saying it's not possible to create the User 
>>>instance without also creating a new Person instance?  Maybe my example 
>>>was not too clear.   Let me re-explain:
>>>
>>>I have a base class A with two subclasses, B1 and B2.  I have already 
>>>created an instance of B1 and stored it to the database, which means 
>>>that an A record and a B1 record were inserted.  I now want to create an 
>>>instance of B2 that extends from the same A record as B1.  Is this possible?
>>>
>>>Thanks again.
>>>
>>>Matt
>>>
>>>[EMAIL PROTECTED] wrote:
>>>
>>>    
>>>
>>>>Matt,
>>>>
>>>>I believe since the Person and Student object exist it will set there
>>>>values to null except the personId.  Because in the User instance you are
>>>>storing allthe other fields are null (if you set them to null when you
>>>>declare them) except the loginName.  So, ojb will know that person and
>>>>student 001 exist and will do and update instead of an insert.
>>>>
>>>>You should create them on the first store.  Or do not have user extend
>>>>Student, instead have a 1:1 relationship.  Depends on your requirments i
>>>>guess.
>>>>
>>>>-chris worley
>>>>
>>>> 
>>>>
>>>>      
>>>>
>>>>>I'm trying to figure out how to store a new persisted object that
>>>>>extends a pre-existing object.
>>>>>
>>>>>For example, I have 3 classes: Person, Student, and User.  Student and
>>>>>User extend Person.  A Student object already exists, and I now want to
>>>>>create a User object that inherits from the same Person as the Student
>>>>>object.  Is this possible?  Here's a code example:
>>>>>
>>>>>User user = new User();
>>>>>user.setLoginName("matt");
>>>>>user.setPersonOid("001"); // A pre-existing person
>>>>>
>>>>>broker.beginTransaction();
>>>>>broker.store(user);
>>>>>broker.commitTransaction();
>>>>>
>>>>>The result of the above code is a NEW empty person object being created
>>>>>with a newly generated OID (via a sequence).  How can I associate the
>>>>>new User with a pre-existing Person?
>>>>>
>>>>>Thanks again.
>>>>>
>>>>>Matt
>>>>>
>>>>>
>>>>>
>>>>>---------------------------------------------------------------------
>>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>
>>>>>
>>>>>   
>>>>>
>>>>>        
>>>>>
>>>>---------------------------------------------------------------------
>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>> 
>>>>
>>>>      
>>>>
>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>  
>>



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

Reply via email to