Thanks for the help. It doesn't look like this is supported in FNH, which is a bummer because this is happening on my root object. I'll just go with HBM and see if we can figure out something better.
On Jan 29, 12:54 pm, Hudson Akridge <[email protected]> wrote: > I believe you can use a custom Loader on a hasMany (at least in NH, not sure > if FNH supports that or not. Source not in front of me). We could write a > custom SqlQuery for you and go that route. That was actually what I was > going to work on this weekend for you, but if you wanted to check into it > you might have quicker success than waiting on me to get time to look at it > :) > > On Fri, Jan 29, 2010 at 12:49 PM, Corey Coogan <[email protected]>wrote: > > > I see. As I was messing with the mapping, I had a feeling that was > > going to be the answer. Since I can't modify the DB, that won't work > > for me. > > > Is there any way I can specify the sql to satisfy that relationship? > > > On Jan 29, 12:46 pm, Hudson Akridge <[email protected]> wrote: > > > I can try taking a look at it this weekend (although fair warning, pretty > > > packed set of days coming up...) and see what I can do. The workaround > > > involves adding the PolicyNumber column to your table twice. Once for > > actual > > > use by the compositeId, and the second time for use as the property. Then > > > keep them synchronized in your domain model. Now you can use a > > property-ref. > > > > Ugly. As. Sin. But it should work. > > > > On Fri, Jan 29, 2010 at 11:53 AM, Corey Coogan <[email protected] > > >wrote: > > > > > I've heard nothing from NHUSERS group on how to resolve this. I'd be > > > > interested in hearing your workaround of mapping PolicyNumber twice. > > > > It sounds ugly, but perhaps the only option. I can't quite figure out > > > > how to do this though? > > > > > On Jan 26, 10:38 am, Corey Coogan <[email protected]> wrote: > > > > > Thanks Hudson. I actually posed the question to NHUsers right after > > > > > my last reply here. When I find something out, I'll share here. The > > > > > DB can't be changed. It's legacy and has an entire insurance company > > > > > running expecting that primary key. The brass here won't even > > > > > consider it. Thanks for asking though. I am a huge anti-fan of > > > > > composite keys as well. > > > > > > Corey > > > > > > On Jan 26, 9:09 am, Hudson Akridge <[email protected]> wrote: > > > > > > > It's no different. Your problem isn't a FNH problem, it's an NH > > > > problem. > > > > > > Also, you may be able to head over to the nhusers > > > > > > <http://groups.google.com/group/nhusers>google group and ask your > > > > question > > > > > > there, they have more experience solving strange edge case > > scenario's. > > > > If > > > > > > they can figure it out and get you the xml for it, then we can > > figure > > > > out > > > > > > the FNH versions of those xml elements. > > > > > > > The only workaround I can think of involves mapping the > > PolicyNumber > > > > column > > > > > > twice on the parent table, which is an awful workaround imo (But > > that > > > > would > > > > > > allow you to map PolicyNumber as the second property). Is there any > > way > > > > we > > > > > > can change the DB schema to move away from CompositeId's (Probably > > not, > > > > but > > > > > > figured I'd ask)? > > > > > > > On Tue, Jan 26, 2010 at 8:46 AM, Corey Coogan < > > [email protected]> > > > > wrote: > > > > > > > Thanks for the help here Hudson. I appreciate your continued > > > > support. > > > > > > > > How would this be possible from an XML mapping strategy? > > > > > > > > On Jan 25, 4:28 pm, Hudson Akridge <[email protected]> > > wrote: > > > > > > > > Can't have two properties mapped to the same field in > > NHibernate. > > > > That's > > > > > > > the > > > > > > > > index out of range exception. It's expecting there to be n > > columns, > > > > but > > > > > > > > there's really n-1 columns (for the repeat). > > > > > > > > > I'm in the middle of a bunch of non-FNH related stuff atm (also > > > > known as > > > > > > > day > > > > > > > > job), but let me think on this and see what we can do about > > getting > > > > > > > around > > > > > > > > this. We should be very close to resolving the issue. I was > > hoping > > > > the > > > > > > > none > > > > > > > > modifier for access would prevent NHibernate from attempting to > > > > include > > > > > > > the > > > > > > > > column in the query a second time. Guess not. More thoughts > > later. > > > > > > > > > On Mon, Jan 25, 2010 at 3:50 PM, Corey Coogan < > > > > [email protected]> > > > > > > > wrote: > > > > > > > > > This is almost working. At least I can build the > > sessionfactory > > > > now. > > > > > > > > > My tests against SqlLite are failing though. Thanks for all > > your > > > > help. > > > > > > > > > > Details below: > > > > > > > > > > -------------------------- > > > > > > > > > Relevant Mapping > > > > > > > > > -------------------------- > > > > > > > > > mapping.Map(x => x.PolicyNumberMapping, > > > > "POLICY_NUMBER").Access.None > > > > > > > > > (); > > > > > > > > > > mapping.HasMany(x => x.CreditCards) > > > > > > > > > .KeyColumn("POL_NBR") > > > > > > > > > .PropertyRef("PolicyNumberMapping"); > > > > > > > > > > - <composite-id mapped="false" unsaved-value="undefined"> > > > > > > > > > - <key-property name="PolicyNumber" type="System.String, > > > > mscorlib, > > > > > > > > > Version=2.0.0.0, Culture=neutral, > > > > PublicKeyToken=b77a5c561934e089"> > > > > > > > > > <column name="`POLICY_NUMBER`" /> > > > > > > > > > </key-property> > > > > > > > > > - <key-property name="PolicyDateTime" type="System.Nullable`1 > > > > > > > > > [[System.DateTime, mscorlib, Version=2.0.0.0, > > Culture=neutral, > > > > > > > > > PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, > > > > > > > > > Culture=neutral, PublicKeyToken=b77a5c561934e089"> > > > > > > > > > <column name="`POLICY_DATE_TIME`" /> > > > > > > > > > </key-property> > > > > > > > > > </composite-id> > > > > > > > > > - <property access="none" name="PolicyNumberMapping" > > > > > > > > > type="System.String, mscorlib, Version=2.0.0.0, > > Culture=neutral, > > > > > > > > > PublicKeyToken=b77a5c561934e089"> > > > > > > > > > <column name="`POLICY_NUMBER`" /> > > > > > > > > > </property> > > > > > > > > > > ----------------------- > > > > > > > > > ERROR > > > > > > > > > ----------------------- > > > > > > > > > Test method > > > NHibernate.Spike.Test.Unit.Mappings.When_policy_is_mapped.Can_map_policy > > > > > > > > > threw exception: System.ArgumentOutOfRangeException: Index > > was > > > > out of > > > > > > > > > range. Must be non-negative and less than the size of the > > > > collection. > > > > > > > > > Parameter name: index. > > > > > > > > > at System.ThrowHelper.ThrowArgumentOutOfRangeException > > > > > > > > > (ExceptionArgument argument, ExceptionResource resource) > > > > > > > > > at System.ThrowHelper.ThrowArgumentOutOfRangeException() > > > > > > > > > at System.Collections.Generic.List`1.get_Item(Int32 index) > > > > > > > > > at > > > > System.Data.SQLite.SQLiteParameterCollection.GetParameter(Int32 > > > > > > > > > index) > > > > > > > > > at > > > System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item > > > > > > > > > (Int32 index) > > > > > > > > > at NHibernate.Type.DateTimeType.Set(IDbCommand st, Object > > value, > > > > Int32 > > > > > > > > > index) > > > > > > > > > at NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd, > > > > Object > > > > > > > > > value, Int32 index) > > > > > > > > > at NHibernate.Type.NullableType.NullSafeSet(IDbCommand st, > > Object > > > > > > > > > value, Int32 index, ISessionImplementor session) > > > > > > > > > at NHibernate.Type.ComponentType.NullSafeSet(IDbCommand st, > > > > Object > > > > > > > > > value, Int32 begin, ISessionImplementor session) > > > > > > > > > at > > NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate > > > > > > > > > (Object id, Object[] fields, Object rowId, Boolean[] > > > > includeProperty, > > > > > > > > > Boolean[][] includeColumns, Int32 table, IDbCommand > > statement, > > > > > > > > > ISessionImplementor session, Int32 index) > > > > > > > > > at > > > > NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object > > > > > > > > > id, Object[] fields, Boolean[] notNull, Int32 j, > > SqlCommandInfo > > > > sql, > > > > > > > > > Object obj, ISessionImplementor session) > > > > > > > > > at > > > > NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object > > > > > > > > > id, Object[] fields, Object obj, ISessionImplementor session) > > > > > > > > > at NHibernate.Action.EntityInsertAction.Execute() > > > > > > > > > at NHibernate.Engine.ActionQueue.Execute(IExecutable > > executable) > > > > > > > > > at NHibernate.Engine.ActionQueue.ExecuteActions(IList list) > > > > > > > > > at NHibernate.Engine.ActionQueue.ExecuteActions() > > > > > > > > > at > > > NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions > > > > > > > > > (IEventSource session) > > > > > > > > > at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush > > > > > > > > > (FlushEvent event) > > > > > > > > > at NHibernate.Impl.SessionImpl.Flush() > > > > > > > > > at NHibernate.Transaction.AdoTransaction.Commit() > > > > > > > > > at > > > NHibernate.Spike.Test.Unit.Mappings.When_policy_is_mapped.Can_map_policy > > > > > > > > > () in > > > > > > > > > > On Jan 21, 4:03 pm, Hudson Akridge <[email protected] > > > > > wrote: > > > > > > > > > > We are deep in NHibernate magic territory :) If that still > > > > doesn't > > > > > > > work > > > > > > > > > for > > > > > > > > > > you, I'll see what I can do about setting up a test > > environment > > > > to > > > > > > > what > > > > > > > > > > you've got and giving it a go. It's an interesting problem, > > and > > > > I'd > > > > > > > like > > > > > > > > > to > > > > > > > > > > know what the final solution will be. My knowledge in this > > area > > > > is > > > > > > > purely > > > > > > > > > > theoretical ;) > > > > > > > > > > > On Thu, Jan 21, 2010 at 4:00 PM, Corey Coogan < > > > > [email protected] > > > > > > > > > > wrote: > > > > > > > > > > > I'll give that a try tomorrow. > > > > > > > > > > > > Thanks, > > > > > > > > > > > Corey > > > > > > > > > > > > On Jan 21, 2:45 pm, Hudson Akridge < > > [email protected] > > > > > > > > wrote: > > > > > > > > > > > > Ah, that might make > > ... > > read more » -- You received this message because you are subscribed to the Google Groups "Fluent NHibernate" 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/fluent-nhibernate?hl=en.
