Ok, figured it out. It was assignment of the value to the component
that was creating an update, which is correct.
In this code, if I comment out Effective assignment, then it sees
change to the component and generates update. Issue here is that one
of the columns in the component is also part of the primary key.
internal ClientAccountTypeHistoryItem(AccountType accountType,
DateRange effective, int clientId)
: this()
{
if (accountType == null ) throw new Exception("AccountType
cannot be null.");
_accountType = accountType;
id = new ClientAccountTypeCompositeID
(clientId,effective.Start);
// Effective = effective;
}
#endregion
#region Attributes
private ClientAccountTypeCompositeID id;
private DateRange _effective;
public virtual DateRange Effective
{
get
{
return _effective;
}
set
{
_effective = value;
}
}
On Mar 24, 10:43 am, epitka <[email protected]> wrote:
> Ayende,
> I mapped the collection to private field just to test what you
> suggested. Setting inverse to true or false does not make any
> difference what so ever. I still get the additional UPDATE. I think
> this is related to composite key not the collection.
>
> On Mar 20, 10:40 am, Ayende Rahien <[email protected]> wrote:
>
> >http://nhprof.com/Learn/Alert?name=SuperfluousManyToOneUpdate
>
> > On Fri, Mar 20, 2009 at 11:35 AM, epitka <[email protected]> wrote:
>
> > > I have some funky mapping going on here due to legacy db and code.
> > > Basically there is a composite Id that has a column that is also part
> > > of the component.
> > > NH creates update statement even though I specified that no update
> > > should be performed on the component, and no insert on one of the
> > > columns in the component as it is part of the composite id. Not sure
> > > if this is a bug or I need to specify something extra in mapping file?
> > > Column in question is EffectiveDate.
>
> > > Here is the mapping:
>
> > > <?xml version="1.0" encoding="utf-8" ?>
> > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
> > > schema="PRDPROD.dbo" auto-import="false">
> > > <class name="SR.Domain.Client.Entities.ClientAccountTypeHistoryItem,
> > > SR.Domain"
> > > table="ClientAcctType" lazy="true">
>
> > > <composite-id name="Id"
> > > class="SR.Domain.Client.Entities.ClientAccountTypeCompositeID,
> > > SR.Domain"
> > > access="field.lowercase">
> > > <key-property
> > > name="ClientID"
> > > column="ClientId"
> > > type="Int32"/>
> > > <key-property
> > > name="EffectiveDate"
> > > column="EffDt"
> > > type="DateTime"/>
> > > </composite-id>
> > > <many-to-one name="AccountType" access="nosetter.camelcase-
> > > underscore"
> > > class="SR.Domain.Client.Values.AccountType,
> > > SR.Domain" column="AcctTypeCd">
> > > </many-to-one>
>
> > > <!-- define a component for DataRange-->
> > > <component access="nosetter.camelcase-underscore"
> > > name="Effective"
> > > class="SR.Domain.Common.Values.DateRange, SR.Domain" insert="true"
> > > update="false">
> > > <property column="EffDt" name="Start" type="DateTime"
> > > insert="false"></property>
> > > <property column="ExpDt" name="End" type="DateTime"
> > > insert="true" ></property>
> > > </component>
> > > </class>
> > > </hibernate-mapping>
>
> > > and here is the log
>
> > > DEBUG NHibernate.SQL SELECT accounttyp0_.ClientId as ClientId1_,
> > > accounttyp0_.EffDt as EffDt1_, accounttyp0_.ClientId as ClientId4_0_,
> > > accounttyp0_.EffDt as EffDt4_0_, accounttyp0_.AcctTypeCd as
> > > AcctTypeCd4_0_, accounttyp0_.ExpDt as ExpDt4_0_ FROM
> > > PRDPROD.dbo.ClientAcctType accounttyp0_ WHERE
> > > accounttyp0_.client...@p0; @p0 = '4056'
> > > DEBUG NHibernate.SQL INSERT INTO PRDPROD.dbo.ClientAcctType
> > > (AcctTypeCd, ExpDt, ClientId, EffDt) VALUES (@p0, @p1, @p2, @p3); @p0
> > > = 'COMM', @p1 = '1/1/2010 12:00:00 AM', @p2 = '4056', @p3 = '1/1/1990
> > > 12:00:00 AM'
> > > DEBUG NHibernate.SQL UPDATE PRDPROD.dbo.ClientAcctType SET ClientId =
> > > @p0, EffDt = @p1 WHERE ClientId = @p2 AND EffDt = @p3; @p0 = '4056',
> > > @p1 = '1/1/1990 12:00:00 AM', @p2 = '4056', @p3 = '1/1/1990 12:00:00
> > > AM'
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---