I did figure out how to get use only one SELECT statement by
incorporating a LEFT JOIN into the query.  I used the optional
attribute instead of the fetch attribute:

<join table="EntityAddress" optional="true">

So...   now the nicely clean EntityAndPrimaryAddress is returned even
if there is only an Entity with no corresponding address.

- David


On Dec 3, 12:51 pm, Jason Meckley <[email protected]> wrote:
> you could map the address to a private field and expose those
> properties on the EntityAndPrimaryAddress object. the public api
> remains clean. the "ugly code" remain encapsulated within the
> EntityAndPrimaryAddress object.
>
> public class EntityAndPrimaryAddress
> {
>     private Address address;
>
>         public virtual int EntityId { get; set; }
>         public virtual int CreatedBy { get; set; }
>         public virtual DateTime CreatedDate { get; set; }
>         public virtual int ModifiedBy { get; set; }
>         public virtual DateTime ModifiedDate { get; set; }
>         public virtual int UpdateCounter { get; set; }
>
>         public virtual bool IsPrimary
>         {
>                 get {return address.IsPrimary;}
>                 set {address.IsPrimary = value;}
>         }
>     ... the rest of the properties.
>
> }
>
> i don't see what other options you have. when working with a legacy
> database details of the database will spill into the domain. the only
> way to prevent this is to refactor the database along with the code.
>
> something else to consider is why querying with a single select is a
> problem.
>
> On Dec 3, 1:06 pm, Fabio Maulo <[email protected]> wrote:
>
>
>
>
>
>
>
> > sure.
> > but you know... the <join> is only a "licenza poetica" of ORM for legacy DB
> > not designed following ORM.
>
> > When you say that the state of an entity is spanned in two tables it mean
> > exactly that to have the state of an entity NH have to join (inner) two
> > tables; there isn't another option, NH have to read all properties.
> > Perhaps you can try using lazy=true in each property and see what will
> > happen, perhaps it will work but AFIK we don't have a specific test for this
> > situation.
>
> > P.S. ORM= Object Relational *Mapping*
>
> > On Fri, Dec 3, 2010 at 2:36 PM, David McClelland <[email protected]
>
> > > wrote:
> > > But a <one-to-one> won't give me the nicely-flattened entity that I'm
> > > interested in:
>
> > >    public class EntityAndPrimaryAddress
> > >    {
> > >        public virtual int EntityId { get; set; }
> > >        public virtual int CreatedBy { get; set; }
> > >        public virtual DateTime CreatedDate { get; set; }
> > >        public virtual int ModifiedBy { get; set; }
> > >        public virtual DateTime ModifiedDate { get; set; }
> > >        public virtual int UpdateCounter { get; set; }
> > >        public virtual bool IsPrimary { get; set; }
> > >        public virtual string Name { get; set; }
> > >        public virtual string Line1 { get; set; }
> > >        public virtual string Line2 { get; set; }
> > >        public virtual string City { get; set; }
> > >        public virtual string State { get; set; }
> > >        public virtual string PostalCode { get; set; }
> > >    }
>
> > > --
> > > 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