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]>
>
> > > > .
> > > > 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.

-- 
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.

Reply via email to