I have a standrd Contact table which contains names, addresses,
emails, telephones etc. It's a pretty big, general purpose table that
get's used to store loads of different entities:
CREATE TABLE Contact
(
        Contact_Ref             INTEGER
                PRIMARY KEY CLUSTERED,
        Title                   INTEGER,
        Initials                NVARCHAR(4),
        Surname                 NVARCHAR(30),
        Etc...

Each Contact row has a ContactLink row which is basically links a
specific type of Contact, such as a Sales Rep to another entity:

CREATE TABLE ContactLink
(
        cnta_det_ref    INTEGER PRIMARY KEY CLUSTERED,
        contact_ref             INTEGER NOT NULL,   <--- Foreign key to link to 
the
Contact table
        reltype                 INTEGER NULL      <-- Type of entity e.g. sales 
rep,
employer etc
                CONSTRAINT FK_ContactDt_ContactHd
                FOREIGN KEY (Contact_Ref)
                REFERENCES Contact (Contact_Ref)
);

Basically the problem is that the Contact table is very wide so to
make searching more efficient I have a ContactInfoDAO which is a lite
object with just a few attibutes. To restrict results to retrieve only
sales reps I have to include the link to the ContactLink table as
well.

My problem is that when I check the sql, I am still bringing back the
*entire* contact row. Here are the HBMs:

The ContactInfo:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Coldharbour.Framework.Model"
assembly="Coldharbour.Framework.Model">
  <class name="Coldharbour.Framework.Model.ConactInfoDAO,
Coldharbour.Framework.Model" table="Contact" lazy="false">
    <id name="ContactRef" column="Contact_Ref">
      <generator class="assigned" />
    </id>
    <property name="Forename" column="Forenames" />
    <property name="Surname" column="Surname" />
    <property name="IsDeleted" column="IsDeleted" />

    <!-- One-To-Many Associations-->
    <bag name="ContactLinks" lazy="true" cascade="all-delete-orphan"
inverse="true" >
      <key column="contact_ref"></key>
      <one-to-many class="ContactLinkDAO"></one-to-many>
    </bag>  </class>
</hibernate-mapping>

The ContactLink Mapping:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Coldharbour.Framework.Model"
assembly="Coldharbour.Framework.Model">
  <class name="Coldharbour.Framework.Model.ContactLinkDAO,
Coldharbour.Framework.Model" table="Contact" lazy="true">
    <id name="CntaDetRef" column="cnta_det_ref">
      <generator class="assigned" />
    </id>
    <property name="RefType" column="ref_type" />
    <property name="Reference" column="reference" />
    <property name="ContSubstype" column="cont_substype" />
    <property name="Reltype" column="reltype" />

    <!-- Many-To-One Associations-->
    <many-to-one name="Contact" column="contact_ref"
class="ContactDAO" inverse="false" />

  </class>
</hibernate-mapping>

I think that problem is that the ContactLink has an association to the
full-fat ContactDAO object. However I have lazy load set to TRUE.

This is the SQL that get's generated:

SELECT top 100 this_.Contact_Ref         as Contact1_3_2_,
               this_.Forenames           as Forenames3_2_,
               this_.Surname             as Surname3_2_,
               this_.IsDeleted           as IsDeleted3_2_,
               links1_.cnta_det_ref      as cnta1_5_0_,
               links1_.ref_type          as ref2_5_0_,
               links1_.reference         as reference5_0_,
               links1_.cont_substype     as cont4_5_0_,
               links1_.reltype           as reltype5_0_,
               links1_.contact_ref       as contact6_5_0_,
               contactdao4_.Contact_Ref  as Contact1_3_1_,
               contactdao4_.Title        as Title3_1_,
               contactdao4_.Initials     as Initials3_1_,
               contactdao4_.Surname      as Surname3_1_,
               contactdao4_.Forenames    as Forenames3_1_,
               contactdao4_.Address1     as Address6_3_1_,
               contactdao4_.Address2     as Address7_3_1_,
               contactdao4_.Address3     as Address8_3_1_,
               contactdao4_.Address4     as Address9_3_1_,
               contactdao4_.Postcode     as Postcode3_1_,
               contactdao4_.Tel_No1      as Tel11_3_1_,
               contactdao4_.Tel_No2      as Tel12_3_1_,
               contactdao4_.Tel_No3      as Tel13_3_1_,
               contactdao4_.Account_No   as Account14_3_1_,
               contactdao4_.Analysis     as Analysis3_1_,
               contactdao4_.Invoice_Type as Invoice16_3_1_,
               contactdao4_.Gen_Comments as Gen17_3_1_,
               contactdao4_.BkSortCode   as BkSortCode3_1_,
               contactdao4_.BkAccNo      as BkAccNo3_1_,
               contactdao4_.RecptGroup   as RecptGroup3_1_,
               contactdao4_.FsType       as FsType3_1_,
               contactdao4_.InvPrint     as InvPrint3_1_,
               contactdao4_.InvDoc       as InvDoc3_1_,
               contactdao4_.Email        as Email3_1_,
               contactdao4_.Other_Memo   as Other25_3_1_,
               contactdao4_.Birth_Date   as Birth26_3_1_,
               contactdao4_.Sex          as Sex3_1_,
               contactdao4_.Picture      as Picture3_1_,
               contactdao4_.VerbPass     as VerbPass3_1_,
               contactdao4_.PayDays      as PayDays3_1_,
               contactdao4_.Salut_Inv    as Salut31_3_1_,
               contactdao4_.PayDom       as PayDom3_1_,
               contactdao4_.PayDomPrev   as PayDomPrev3_1_,
               contactdao4_.BankAnal     as BankAnal3_1_,
               contactdao4_.DebtAnal     as DebtAnal3_1_,
               contactdao4_.DebtCC       as DebtCC3_1_,
               contactdao4_.InvBackDoc   as InvBackDoc3_1_,
               contactdao4_.ShowAccBal   as ShowAccBal3_1_,
               contactdao4_.IsDeleted    as IsDeleted3_1_,
               contactdao4_.CreatedBy    as CreatedBy3_1_,
               contactdao4_.CreatedDate  as Created41_3_1_,
               contactdao4_.UpdatedBy    as UpdatedBy3_1_,
               contactdao4_.UpdatedDate  as Updated43_3_1_
FROM   Contact this_
       inner join ContactLink links1_
         on this_.Contact_Ref = links1_.contact_ref
       left outer join Contact contactdao4_
         on links1_.contact_ref = contactdao4_.Contact_Ref
WHERE  links1_.ref_type = 654 /* @p0 */
       and this_.IsDeleted = 0 /* @p1 */

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