1) No OOP mapping 2) Your question was "how can I turn that into a left join, so that I can get folders that have no documents?" but that is impossible because: name="FolderID" not-null="true"
Try again. On Wed, Sep 15, 2010 at 3:16 PM, rsr <[email protected]> wrote: > Well, since you asked, the reason I am avoiding traditional NH > collection mapping is... > > I am converting a moderate sized project from using Linq/SQL to NH. > The project architecture has isolated all of the Linq/SQL at a > particular layer from which it maps the DBML generated classes to some > POCO classes that are what is used throughout the rest of the system. > Including WCF messaging and caching, and these POCOs don't cache the > entire graph, but rather an object with the ID of its associate (which > lives in it's own cache collection). The problem with that comes when > I need to re-hydrate the NH entity from a POCO, like in order to save > it, and that POCO only has the ID of it's associate - not a POCO > entity. > > So, that's why I am doing, as you say, more of a DB model than a > domain model at the NH layer. Over time, I may come back and convert > these mappings to more standard NH associations, but for the initial > migration, this is the approach I'm using. > > And with this approach I am still able to use HQL to build the basic > sorts of queries that are typically used in this application. That is, > the inner join type that I mentioned initially. But, there are a > couple of cases where left joins would be beneficial, and hence my > initial question. > > Which, once again, is whether there is some special HQL syntax that > could be used to get outer join behavior without the associations. It > appears that the answer is no, there isn't. > > I haven't showed the mappings because, well, there isn't really much > to show. But, fwiw here they are. I have omitted the properties that > are not relevant to the association. > > <class name="Folder" table="FileSvc.Folder" > > <id name="FolderID" type="int" unsaved-value="0" > > <generator class="native" /> > </id> > <property name="ParentFolderID" type="int" /> > <property name="FolderName" type="string" length="255" not- > null="true"/> > </class> > > <class name="Document" table="FileSvc.Document" > > <id name="DocumentID" type="int" unsaved-value="0" > > <generator class="native" /> > </id> > <property name="DocumentName" type="string" length="255" not- > null="true"/> > <property name="FolderID" type="int" not-null="true" /> > </class> > > On Sep 15, 5:27 am, Diego Mijelshon <[email protected]> wrote: > > I'm interested in the reasons for NOT mapping your model. What you have > now > > is a DB model, not a domain model. > > If you mapped your collection, it would be as easy as: > > > > select f, d > > from Folder f > > left join f.Documents d > > > > But you don't even need that. You can use "from Folder" and then just > > navigate the Documents relationship as convenient. > > If you set batch-size on the collection to a reasonable number, you avoid > > the SELECT N+1 problem in one single step. > > > > Diego > > > > On Wed, Sep 15, 2010 at 00:22, rsr <[email protected]> wrote: > > > > > Each document has a FolderID column, which is a foreign key to its > > > containing folder. > > > > > Normally, in NH, I you'd map this as a many-to-one on Document, > > > pointing at Folder, and a collection of some sort on Folder, > > > containing Documents. Right? But like I say, I'm not using any > > > association mappings > > > (i have my reasons, trust me). > > > > > Supposing my select was > > > select f, d from .... > > > > > then ideally, I'd get back something like a list of tuples where the > > > first item is the folder and the second is a document. Yes, I'd get > > > a separate result for each document, with the same instance of the > > > Folder as the other children of the same folder. I'd have to gather > > > them up and build the collection by folder. No problem there. > > > Empty folders would be represented by a tuple with folder and a null > > > document. > > > Or maybe every folder would have an entry with a folder and a null, > > > whether it is empty or not. > > > > > Make sense? > > > > > On Sep 14, 7:05 pm, Diego Mijelshon <[email protected]> wrote: > > > > If you have a FolderID in the Document, you are NOT mapping it as I > would > > > > imagine... > > > > > > Also, what are you trying to retrieve with your query? all folders > with > > > all > > > > their documents? > > > > > > Diego > > > > > > On Tue, Sep 14, 2010 at 22:26, rsr <[email protected]> wrote: > > > > > Say I've got two tables Folder and Document related as you can > > > > > imagine, and mapped in NH using just a simple property FolderID on > the > > > > > Document entity. i.e. - no many-to-one mapping. > > > > > > > I can do an HQL inner join by using > > > > > from Folder f, Document d where f.FolderID = d.FolderID > > > > > and that's great. > > > > > > > My question is - how can I turn that into a left join, so that I > can > > > > > get folders that have no documents? > > > > > > > Thanks. > > > > > > > -- > > > > > 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]<nhusers%[email protected]> > <nhusers%[email protected]<nhusers%[email protected]> > > > > > <nhusers%[email protected]<nhusers%[email protected]> > <nhusers%[email protected]<nhusers%[email protected]> > > > > > > > > > . > > > > > For more options, visit this group at > > > > >http://groups.google.com/group/nhusers?hl=en. > > > > > -- > > > 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]<nhusers%[email protected]> > <nhusers%[email protected]<nhusers%[email protected]> > > > > > . > > > For more options, visit this group at > > >http://groups.google.com/group/nhusers?hl=en. > > -- > 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]<nhusers%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > > -- Fabio Maulo -- 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.
