I guess I don't quite understand. I'm calling a stored procedure so there's no need to use the alias, right? The mapping works if I call GetNamedQuery() but I cannot drill down into the object tree to find the collection in a lazy load scenario.
On Apr 2, 5:47 pm, Fabio Maulo <[email protected]> wrote: > As I wrote above...The alias is needed not only in the XML tag but in the > query. > > 2009/4/2 jpcleve <[email protected]> > > > > > > > > > Yep...I finally figured that one out. I have been able to load the > > collection via the custom loader but ONLY if I use the following > > statement from my object repository: > > > using (ISession session = NHibernateHelper.OpenSession()) > > { > > return session > > .GetNamedQuery("GetContactsByAccessContact") > > .SetInt32("AccessContactId", Id) > > .List<Contact>(); > > > } > > > Here's my collection mapping: (table is actually a view) > > > <bag name="Contacts" table="vwContacts"> > > <key column ="Id"/> > > <one-to-many class="AccessData.Domain.Contact, AccessData"/> > > <loader query-ref="GetContactsByAccessContact"/> > > </bag> > > > And my custom loader that executes a sproc: > > > <sql-query name="GetContactsByAccessContact"> > > <load-collection alias="Contacts" role="AccessContact.Contacts"/> > > exec GetContactsByAccessContact :AccessContactId > > </sql-query> > > > The sproc: > > > ALTER PROCEDURE [dbo].[GetContactsByAccessContact] > > > �...@accesscontactid int > > AS > > BEGIN > > > DECLARE @ContactUniqueID nvarchar(50) > > DECLARE @AccountID_FK int > > > SET @ContactUniqueID = (SELECT ContactUniqueID FROM AccessContacts > > WHERE ID = @AccessContactID) > > SET @AccountID_FK = (SELECT AccountID_FK FROM AccessContacts WHERE > > ID > > = @AccessContactID) > > > SELECT * > > FROM vwContacts c > > WHERE c.UniqueID = @ContactUniqueID AND c.AccountID_FK = > > @AccountID_FK > > > END > > > I don't understand, though, why NH won't populate the collection for > > me without my explict method-calling. The collection is mapped, so why > > isn't it lazy loaded when I evaluate the property that corresponds to > > my mapped collection? All of my other collections work just fine, but > > this one's giving me a fit. Any ideas why it won't lazy load for me? > > > Thanks, > > > John > > > On Apr 2, 3:15 pm, -_- <[email protected]> wrote: > > > I think nHibernate just "knows" to populate the first ? with Id > > > (because Id is the first declared property of the class you are using > > > to populate it?). > > > > On Apr 2, 2:18 pm, jpcleve <[email protected]> wrote: > > > > > I've been following your thread on the other forum hoping for a > > > > solution. > > > > I have my example configured just as yours and it's almost working. My > > > > problem is that I don't know how to define parameters for the prepared > > > > sql statement. For example: > > > > > <sql-query name="customLoader"> > > > > <load-collection alias="dev" role="Page"/> > > > > <![CDATA[SELECT * FROM PAGES WHERE Pages.fkbookId= :id]]> > > > > </sql-query> > > > > > how is ":id" being set? where is that parameter defined? > > > > > Any ideas? > > > > > On Apr 2, 12:32 pm, -_- <[email protected]> wrote: > > > > > > Anyone have any sample code for populating a bag with a custom SQL > > > > > SELECT statement? I need to be able to run a query using the object's > > > > > id and it should return a list of another type of object. > > > > > > The mapping code below demonstrates sorta what I need to do but this > > > > > doesn't work. > > > > > > Mapping Code: > > > > > > <class name="Book" table="Devices"> > > > > > <id name="Id" type="Int32" column="Id" access="property"> > > > > > <generator class="identity"> > > > > > <param name="table">Books</param> > > > > > <param name="column">Id</param> > > > > > </generator> > > > > > </id> > > > > > <bag name="PagesInBook" inverse="true"> > > > > > <key></key> > > > > > <one-to-many class="Pages"/> > > > > > <loader query-ref="customLoader"/> > > > > > </bag> > > > > > </class> > > > > > <class name="Page" table="Pages"> > > > > > <id name="Id" type="Int32" column="Id" access="property"> > > > > > <generator class="identity"> > > > > > <param name="table">Pages</param> > > > > > <param name="column">Id</param> > > > > > </generator> > > > > > <property name ="BookId" column="fkBookId"/> > > > > > </id> > > > > > </class> > > > > > <sql-query name="customLoader"> > > > > > <load-collection alias="dev" role="Page"/> > > > > > <![CDATA[SELECT * FROM PAGES WHERE Pages.fkbookId= :id]]> > > > > > </sql-query> > > > > > > FOR MORE INFO you can look my forum post here: > >http://forum.hibernate.org/viewtopic.php?t=995589 > > > > > > Thanks- Hide quoted text - > > > > - Show quoted text - > > -- > Fabio Maulo- Hide quoted text - > > - Show quoted text - --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nhusers?hl=en -~----------~----~----~----~------~----~------~--~---
