No.  document.FolderID is correctly declared not-null="true" because
every document has a folder.
I want the folders which have no documents.

I can easily write a sql query to do:
   select f.* from folder f left join document d on f.folderid =
d.folderid where d.folderid is null

But I'd like to use HQL if possible.

On Sep 15, 1:26 pm, Fabio Maulo <[email protected]> wrote:
> 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