This approach is correct when you add new functionality, or design new
system.

In this case I have to add  fields to association table in existing
solution.
'Bs' collection is used in many hql queries , or DetachedCriteria.

When I use solution you provide, I should rewrite them all not to use
'Bs' but 'ManyToManyWithProperties' instead.
This require not only simple string replace, but a bit more work,
because 'Bs' contain collection of B, and ManyToManyWithProperties
contain collection of mapping table artifact ABClass.

In my case the solution was to use
IPostCollectionRecreateEventListener and
IPostCollectionUpdateEventListener, and provide additional data to
database by executing additional session.SQLQuery (additional fields
contains modification user and date).
I could use that workaround, because I don't need access to that
fields through app code. I need it only in database.

In other cases there is no other way than use solution Fabio provide.

Thanks for your patience

Bartosz Pierzchlewicz

On 29 Lis, 13:39, Fabio Maulo <[email protected]> wrote:
> protected ICollection<ABClass> ManyToManyWithProperties { get;set;}
>
> public ICollection<B> Bs {
> get{
>  return ManyToManyWithProperties.Select(ab=> ab.A).ToList();
>
> }
> }
>
> Some examples about many-to-many mapping 
> patternshttp://fabiomaulo.blogspot.com/2010/03/conform-mapping-many-to-many.html
>
> On Mon, Nov 29, 2010 at 9:05 AM, Bartosz Pierzchlewicz <
>
>
>
>
>
> [email protected]> wrote:
> > Sorry Fabio, but I probably still don't understand you.
>
> > You say, that I can have ABclass with additional properties and I do
> > not have to remove ICollection<A> from B?
> > How? If it is possible it solves my problem, but I still don't know
> > how to map model.
>
> > I don't see other solution than replace  ICollection<A> in B with
> > ICollection<ABclass>.
>
> > Bartosz
>
> > On 29 Lis, 12:29, Fabio Maulo <[email protected]> wrote:
> > > emh... I think that you are mixing the persistence with what you are
> > > exposing in your entity.
> > > Even if, having properties, the relation have to be an ABclass with
> > > two many-to-one nobody said that, in your A and B, you have to remove
> > > the collection of Bs and As...
> > > About the "change of logic": the fact that now the relation ifself has
> > > properties, is a "change of logic"
> > > --
> > > Fabio Maulo
>
> > > El 29/11/2010, a las 05:36, Bartosz Pierzchlewicz
> > > <[email protected]> escribió:
>
> > > > Thanks for your answer.
>
> > > > First your advice is equivalent to replacing many-to-many relation
> > > > with one-to-
> > > > many, one-to-one, many-to-one which we would like to avoid.
> > > > Because this not only changes mapping, but also require change of
> > > > logic. (B class has collection of A, but after change it will have
> > > > collection of 'ab' classes, which has different meaning).
> > > > I also tried to write 'ab' class as artifact (example above), but I
> > > > think there is no way to access them without rewriting mapping from
> > > > many-to-many.
>
> > > > Second advise, sounds reasonable, but I have no idea how to write
> > > > mappings to make it works.
>
> > > > Could you please to give me example?
>
> > > > Bartosz Pierzchlewicz
>
> > > > On 28 Lis, 17:45, Fabio Maulo <[email protected]> wrote:
> > > >> If the relation has additional properties you need an "artifact" to
> > > >> represent the relation with relation-properties; the best candidate
> > > >> as "artifact" is a class.
>
> > > >> The other option is the usage of a Dictionary where the key is the
> > actual
> > > >> many-to-many and the value is a component (a class containing only the
> > > >> properties of the relation without the relation itself).
>
> > > >> On Thu, Nov 25, 2010 at 4:24 AM, Bartosz Pierzchlewicz <
>
> > > >> [email protected]> wrote:
> > > >>> Thanks,
> > > >>> but I'm not sure what you mean.
> > > >>> Could you give me a example?
>
> > > >>> On 25 Lis, 07:04, Erendrake <[email protected]> wrote:
> > > >>>> One thing i tried before was to add another relationship. You end up
> > > >>>> with the ManyToMany as well as two ManyToOne with the AB table in
> > the
> > > >>>> middle. its not perfect but it worked for me in my app. hope it
> > helps
>
> > > >>>> On Nov 24, 1:06 am, Bartosz Pierzchlewicz <[email protected]>
> > > >>>> wrote:
>
> > > >>>>> Hi,
> > > >>>>> My problem is easy to explain, but difficult to solve.
> > > >>>>> We using NN 2.1. (rev 4896)
> > > >>>>> I have two classes and many-to-many relation between them (sorry
> > for
> > > >>>>> using AR notation)
>
> > > >>>>>         [ActiveRecord]
> > > >>>>>         public class A
> > > >>>>>         {
> > > >>>>>                 [Property]
> > > >>>>>                 public string NameA { get; set; }
> > > >>>>>         }
>
> > > >>>>>         [ActiveRecord]
> > > >>>>>         public class B
> > > >>>>>         {
> > > >>>>>                 [Property]
> > > >>>>>                 public string NameB { get; set; }
>
> > > >>>>>                 [HasAndBelongsToMany(typeof(A),Table = "ab",
> > ColumnKey
> > > >>> = "b",
> > > >>>>> ColumnRef = "a")]
> > > >>>>>                 public ICollection<A> ACollection { get; set; }
> > > >>>>>         }
>
> > > >>>>> Now, I have to add some fields do ab table like modificationUser
> > and
> > > >>>>> modificationDate.
> > > >>>>> So I wrote mapping class like that (I know, that we can use
> > composite
> > > >>>>> key):
>
> > > >>>>>         [ActiveRecord]
> > > >>>>>         public class ab
> > > >>>>>         {
> > > >>>>>                 [PrimaryKey]
> > > >>>>>                 public int Id { get; set; }
>
> > > >>>>>                 [BelongsTo]
> > > >>>>>                 public A a { get; set; }
>
> > > >>>>>                 [BelongsTo]
> > > >>>>>                 public B b { get; set; }
>
> > > >>>>>                 [Property]
> > > >>>>>                 public string ModificationUser { get; set; }
>
> > > >>>>>                 [Property]
> > > >>>>>                 public DateTime ModificationDate { get; set; }
> > > >>>>>         }
>
> > > >>>>> Now comes the question: is there any way to access ModificationUser
> > > >>>>> and ModificationDate fields?
>
> > > >>>>> I tried using EventListener, but no success.
> > > >>>>> Maybe NH interceptors, or writing own custom CollectionPersister?
>
> > > >>>>> It is not solution for us to replace many-to-many relation with
> > one-to-
> > > >>>>> many, one-to-one, many-to-one, because ACollection is already used
> > in
> > > >>>>> many hql queries, and changing from ICollection<A> ACollection to
> > > >>>>> ICollection<ab> ABCollection require to rewrite them all.
>
> > > >>>>> Thanks for any help.
>
> > > >>> --
> > > >>> 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%252bunsubscr...@googlegroup­s.com>>
> > > >>> .
> > > >>> 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]<nhusers%[email protected]­>
> > .
> > > > For more options, visit this group athttp://
> > 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