> Currently in the MultiTableEntityPersister there fields such as > "subclassTableNameClosure" that get initialized with the information about > the persistant objects subclasses. Currently, when I get the persister for > the object "Multi" above, I get information about Simple, Multi, and > SubMulti. The inclusion of SubMulti in the information is currently what is > causing my trouble in generating the SQL statements since I am not using > outer joins between the tables containing Simple and Multi (and SubMulti, > since it get's included right now.)
Yes, SubMulti should be included. Because when we load an object by id or by a query we don't know if it might be an instance of a subclass at the time the SQL query is issued. So what happens is that often Hibernate uses a different persister to *initialize* the object to the one it uses to query the database. So each MultiTableEntityPersister has the "tableNames" field to hold all tables used to persist the state of the concrete class, and the "subclassTableNameClosure" field to hold all tables used to persist the state of that class and, potentially, its subclasses. Make sense? ----- Original Message ----- From: "Jon Lipsky" <[EMAIL PROTECTED]> To: "Gavin King" <[EMAIL PROTECTED]> Cc: "hibernate list" <[EMAIL PROTECTED]> Sent: Tuesday, October 15, 2002 12:22 AM Subject: Re: [Hibernate] Looking for Volunteers > Hey Gavin, > > I'm still working on getting the query functionality working with the > MultipleTableEntityPersister and I have a question that you may be able to > answer before I go spend hours and hours tracing the functionality. > > In order to understand my question, I've attached the mapping xml that I am > currently testing with: (which is a modified version of the one currently > checked into CVS.) > > <hibernate-mapping> > > <class name="cirrus.hibernate.test.Simple" table="rootclass"> > <id type="long" column="id_" > > <generator class="assigned"/> > </id> > <version name="count"/> > <property name="name"/> > <property name="address"/> > <property name="date" column="date_"/> > > <joined-subclass name="cirrus.hibernate.test.LessSimple" table="subclass"> > <superclass-key column="id_"/> > <property name="intprop"/> > <one-to-one name="other" class="cirrus.hibernate.test.LessSimple"/> > <property name="foo" column="other"/> > </joined-subclass> > > <joined-subclass name="cirrus.hibernate.test.Multi" table="nuthasubclass"> > <superclass-key column="sid"/> > <property name="extraProp"/> > <property name="multiDate" column="date_"/> > > <many-to-one name="other" class="cirrus.hibernate.test.Multi"/> > <many-to-one name="parent" class="cirrus.hibernate.test.Multi"/> > > <set role="children" > > <key column="parent"/> > <one-to-many class="cirrus.hibernate.test.Multi"/> > </set> > > <joined-subclass name="cirrus.hibernate.test.SubMulti" table="submulti"> > <superclass-key column="sid"/> > <property name="amount"/> > </joined-subclass> > > </joined-subclass> > > </class> > > </hibernate-mapping> > > Now for the question: > > Currently in the MultiTableEntityPersister there fields such as > "subclassTableNameClosure" that get initialized with the information about > the persistant objects subclasses. Currently, when I get the persister for > the object "Multi" above, I get information about Simple, Multi, and > SubMulti. The inclusion of SubMulti in the information is currently what is > causing my trouble in generating the SQL statements since I am not using > outer joins between the tables containing Simple and Multi (and SubMulti, > since it get's included right now.) > > My question is, did you intend to load the information about SubMulti in to > the arrays? Before I go and change something, I wanted to see what your > original intention of that was. > > Thanks, > Jon... > > > ----- Original Message ----- > From: "Gavin King" <[EMAIL PROTECTED]> > To: "Jon Lipsky" <[EMAIL PROTECTED]> > Cc: "hibernate list" <[EMAIL PROTECTED]> > Sent: Saturday, October 12, 2002 4:53 AM > Subject: Re: [Hibernate] Looking for Volunteers > > > > Ace! Thanks Jon ... looking forward :) > > > > ----- Original Message ----- > > From: "Jon Lipsky" <[EMAIL PROTECTED]> > > To: "Gavin King" <[EMAIL PROTECTED]> > > Cc: <[EMAIL PROTECTED]> > > Sent: Saturday, October 12, 2002 2:04 AM > > Subject: Re: [Hibernate] Looking for Volunteers > > > > > > > Hi Gavin, > > > > > > I spent a few hours today working on this, and I think I have it about > > > finished. > > > > > > - It can now handle two columns with the same name in different tables. > > > - It now will work for both Oracle and Ansi style joins > > > - It works for insert, update, and load by primary key. > > > > > > All I have left to do is finish the "select" code, and then I'll submit > it > > > for you to play around with. Right now, the code for generating the > > selects > > > is about finished, all I have left to do is to figure out how to get the > > > portion of the select statement needed to load the MultipleTableEntity > in > > > sync with the rest (Right now the alias names don't match up.) > > > > > > I'll won't be able to continue working on this until Monday, so don't > > expect > > > anything before then. > > > > > > Jon... > > > > > > > > > ----- Original Message ----- > > > From: "Gavin King" <[EMAIL PROTECTED]> > > > To: "Jon Lipsky" <[EMAIL PROTECTED]> > > > Cc: <[EMAIL PROTECTED]> > > > Sent: Friday, October 11, 2002 9:27 AM > > > Subject: Re: [Hibernate] Looking for Volunteers > > > > > > > > > > I'm pre-warning you that this will be a bit involved, Jon - and you > will > > > > probably have to change the Loadable interface, refactoring some stuff > > > thats > > > > currently done in the Loader hierarchy onto the XXXXEntityPersister > > > classes. > > > > > > > > I don't have an existing testcase, but if you add a many-to-one > > > association > > > > to some class in Multi.hbm.xml, that will be enough. > > > > > > > > MultiTableEntityPersister implements table-per-subclass persistence. > > > > EntityPersister implements the old-style persistence. > > > > > > > > Currently MultiTableEntityPersister is a valid implementation of > > > operations > > > > from ClassPersister and Queryable but *not* of all operations defined > on > > > > Loadable. ie. MultiTableEntityPersister defines the operations needed > by > > > > SimpleEntityLoader but not by OuterJoinLoader. > > > > > > > > At the moment, I am generating SQL along the lines of: > > > > > > > > select > > > > t.id as id1, t.clazz as clazz1, t.prop as prop1, > > > > t1.subprop as subprop1 > > > > from roottable t > > > > left outer join subtable t1 > > > > on t.id = t1.id > > > > > > > > for the _query_ stuff. That will have to change in a couple of ways: > > > > > > > > (1) it doesn't handle the case of two columns with the same name in > > > > different tables > > > > (2) it shouldnt always be an outerjoin really .... sometimes it should > > be > > > > just a join > > > > > > > > but thats enough to get us started. Baby steps. So if you generate > > > something > > > > similar for outerjoin loading, we will be in business. > > > > > > > > P.S. I just noticed that because MultiTableEntityPersister doesn't > > support > > > > outerjoin loading, it also can't be loaded by CollectionLoader or > > > > EntityLoader. So this is an important thing to finish. > > > > > > > > > > > > ----- Original Message ----- > > > > From: "Jon Lipsky" <[EMAIL PROTECTED]> > > > > To: "Gavin King" <[EMAIL PROTECTED]> > > > > Sent: Friday, October 11, 2002 4:34 PM > > > > Subject: Re: [Hibernate] Looking for Volunteers > > > > > > > > > > > > > Hi Gavin, > > > > > > > > > > Not a problem. If you can point me to a valid test case for this, > I'd > > > be > > > > > more than willing to make sure the outer join fetching works. > > > > > > > > > > Jon... > > > > > > > > > > > > > > > ----- Original Message ----- > > > > > From: "Gavin King" <[EMAIL PROTECTED]> > > > > > To: <[EMAIL PROTECTED]> > > > > > Sent: Wednesday, October 09, 2002 6:56 PM > > > > > Subject: [Hibernate] Looking for Volunteers > > > > > > > > > > > > > > > > Okay, I finally have something concrete for normalized > > > > > (table-per-subclass) > > > > > > mappings. I went down a couple of wrong paths before I decided on > > the > > > > best > > > > > > approach (a completely new implementation of ClassPersister). > > > > > > > > > > > > I can save/load/update/delete instances already. > > > > > > > > > > > > We need (in order of importance): > > > > > > > > > > > > * SchemaExport support (and proper support in the mapping > document) > > > > > > * Query language integration (the hard bit) > > > > > > * Support for outerjoin fetching > > > > > > * Support for versioning (easy) > > > > > > * support for native id-generation (not very hard) > > > > > > > > > > > > If anyone wants to help out with any of these problems, I would > very > > > > much > > > > > > appreciate it. > > > > > > > > > > > > ( In particular, since Jon Lipsky understands the outerjoin > fetching > > > > code, > > > > > > maybe he would have a look at that stuff? ) > > > > > > > > > > > > I'm perhaps being slightly over-eager here, since I still need to > > > rework > > > > > the > > > > > > map package part of this; what I've got there now is kludge. But I > > > will > > > > do > > > > > > that (and finish it) tomorrow. When I do that, it will knock the > top > > > > item > > > > > > off the list by side-effect and make the other items doable. > > > > > > > > > > > > Anyway, if anyone can spare the time, please stick your hand up > and > > I > > > > will > > > > > > point in right direction.... > > > > > > > > > > > > Gavin > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------- > > > > > > This sf.net email is sponsored by:ThinkGeek > > > > > > Welcome to geek heaven. > > > > > > http://thinkgeek.com/sf > > > > > > _______________________________________________ > > > > > > hibernate-devel mailing list > > > > > > [EMAIL PROTECTED] > > > > > > https://lists.sourceforge.net/lists/listinfo/hibernate-devel > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------- > > > This sf.net email is sponsored by:ThinkGeek > > > Welcome to geek heaven. > > > http://thinkgeek.com/sf > > > _______________________________________________ > > > hibernate-devel mailing list > > > [EMAIL PROTECTED] > > > https://lists.sourceforge.net/lists/listinfo/hibernate-devel > > > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > hibernate-devel mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/hibernate-devel ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ hibernate-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/hibernate-devel