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.

Reply via email to