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]