Yeah, this was more about showing it's possible than anything. In my case, I'm using it only with immutable fields
Diego On Fri, Apr 2, 2010 at 15:25, Roger Kratz <[email protected]> wrote: > It's impressive that nh could do this (didn't know that), but I would > personally go for some sort of composition instead of inheritance here. IMHO > - an entity should be _one_ type throughout its life time, the fact that > it's passing through a db making it possible to change this OO behaviour > feels... well... strange. > > > > ________________________________ > Från: [email protected] [[email protected]] för Diego > Mijelshon [[email protected]] > Skickat: den 2 april 2010 19:51 > Till: nhusers > Ämne: Re: [nhusers] how to map - table per class hierarchy with default > class > > Not only is theoretically possible to map arbitrary stuff to discriminator > values: I'm actually doing it :-) > All you have to do is use a formula for the discriminator. Example: > > <class name="Guy" discriminator-value="G"> <id ... >...</id> > <discriminator formula="case when Income > 1000000 then 'R' when Income > < 10000 then 'P' else 'G' end"/> <property name="Income"/> <subclass > discriminator-value="R" name="RichGuy"/> <subclass discriminator-value="P" > name="PoorGuy"/> </class> > > Anyway, when using inheritance like this, you need to keep some things in > mind: > > * When lazily loading instances of Guy, the object type will inherit > from Guy, NOT RichGuy/PoorGuy. Virtual method calls will work as expected, > but type comparisons/conversions (i.e. "guyInstance is RichGuy" or > "guyInstance as PoorGuy") will fail. Read > http://ayende.com/Blog/archive/2009/09/03/answer-the-lazy-loaded-inheritance-many-to-one-association-orm.aspx > * A persistent instance will not change its type while it's referenced > by the session. So, if you increase a poor guy's income to 10000, you'll > only get a PoorGuy instance in a different session OR by evicting and > reloading it. > > Diego > > > On Fri, Apr 2, 2010 at 13:28, nadav s <[email protected]<mailto: > [email protected]>> wrote: > lets say i have Employee which is a concrete class with the properties > Id > Type > > and i have CoolEmployee and MoronEmployee that extend Employee > > now i have many employee types and i want type=1 to generate CoolEmployee > and type=2 to generate MoronEmployee. > there are alot of other possible values, for instance, 3 is manager and 4 > is Cleaning guy, and i want all of these other values to generate the > Employee class > > Do i need an extra column to discriminate between the classes or can i > somehow say that Employee is the default class of a not-found value and use > the type column? > > (i don't have a mapping because it is just a theoritical question :) ) > > btw, another thing i was wondering about but couldn't google an answer is > if it is currently possible to set range of values for discrimination > (similar to the previous question) > lets say that i have the sub classes RichGuy, PoorGuy both extend Guy > and i wanna have the RichGuy subclass generated when the Income column is > more than 1,000,000 > if the Income is between 10,000 to 1,000,000 its just a Guy > and less than 10,000 is a PoorGuy > > could this be mapped? > i see a big problem with this scenario because if the Income property is > updatebly by the application, we could have a PoorGuy that his Income just > became > high enough that he should become just a Guy > but if the Income property isn't updatebly it might make sense > > again, it is just a theoretical question. > > thanks. > > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To post to this group, send email to [email protected]<mailto: > [email protected]>. > To unsubscribe from this group, send email to > [email protected]<nhusers%[email protected]> > <mailto:nhusers%[email protected]<nhusers%[email protected]> > >. > For more options, visit this group at > http://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. > > -- > 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. > > -- 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.
