Ah! It seems to be working now - Thanks a lot :)
On Feb 5, 8:15 pm, Naftoli Gugenheim <[email protected]> wrote: > Not tested or compiled > > object isLab extends MappedBoolean(this) > 1. > def source: Box[Source] = if(isLab.is) lab.obj else scientist.obj > def source_=(s: Source) = s match { > case l: Lab => isLab(true); lab(l) > // same for scientist > > } > > 2. > object source extends MappedLong { > def obj = if(isLab) Lab.find(is) else Scientist.find(is) > def obj_=(s: Source) = s match { > case _: Lab => set(s.id) > // same for scientist > > } > > The advantage of 1 is database FK constraints. > The advantage of 2 is fewer fields. > > ------------------------------------- > > Mads Hartmann<[email protected]> wrote: > > Thank you for taking your time to answer my question > > I don't think I fully understand how to implement any of the suggested > solutions, if you have the time I would love a code example :) > > Thanks a lot, > Mads Hartmann Jensen > > On Feb 5, 7:34 pm, Naftoli Gugenheim <[email protected]> wrote: > > > > > Basically, either use two protected LongMappedMappers and a public > > getter/setter that takes a boolean into account in both directions; or use > > a MappedLong, with > > def obj = whicheverLookUpTable.find(this.is) > > and > > override def set(s: Source) = s match ... > > > Sorry for the brevity, if unclear please ask. > > > ------------------------------------- > > > Mads Hartmann<[email protected]> wrote: > > > Naftoli would you please re-post your solution :) I could really use > > the help > > > On Feb 5, 6:56 pm, Naftoli Gugenheim <[email protected]> wrote: > > > > Peek --www.getpeek.com > > > Please forward any bad messages to [email protected] > > > > ------------------------------------- > > > > Ross Mellgren<[email protected]> wrote: > > > > This is actually fairly common that messages Naftoli sends are empty, or > > > don't get threaded onto the original discussion, or formatting comes out > > > funny. Naftoli, what email client are you using? > > > > -Ross > > > > On Feb 5, 2010, at 1:49 AM, Mads Hartmann wrote: > > > > > Hey Naftoli, > > > > I think something might have broken your first message, It's a blank > > > > message if you view it through the web-interface: > > > >http://groups.google.com/group/liftweb/browse_thread/thread/e2317e5db... > > > > > If you have a solution I would love to hear it :) > > > > > On Feb 5, 1:52 am, Naftoli Gugenheim <[email protected]> wrote: > > > >> Does my approach not work? > > > > >> ------------------------------------- > > > > >> Mads Hartmann<[email protected]> wrote: > > > > >> Yeah that helped, my lab and scientist now looks like this: > > > > >> /------------------------------- code > > > > >> trait BaseSourceTrait[ T <:BaseSourceTrait[T] ] extends > > > >> LongKeyedMapper[T] { > > > > >> self: T => > > > > >> override def primaryKeyField = id > > > >> object id extends MappedLongIndex(this) > > > > >> object name extends MappedPoliteString(this, 256) > > > >> object sourceType extends MappedEnum(this,SourceTypes) > > > > >> object SourceTypes extends Enumeration { > > > >> val Scientist = Value("Scientist") > > > >> val Lab = Value("Lab") > > > >> } > > > > >> } > > > > >> class Scientist extends BaseSourceTrait[Scientist] { > > > > >> def getSingleton = Scientist > > > > >> object birth extends MappedInt(this) > > > >> object death extends MappedInt(this) > > > >> object nationality extends MappedPoliteString(this, 128) > > > > >> } > > > > >> object Scientist extends Scientist with LongKeyedMetaMapper[Scientist] > > > >> { > > > >> override def dbTableName = "Source" > > > > >> } > > > > >> class Lab extends BaseSourceTrait[Lab] { > > > > >> def getSingleton = Lab > > > > >> object institution extends MappedLongForeignKey(this, Institution) > > > > >> } > > > > >> object Lab extends Lab with LongKeyedMetaMapper[Lab] { > > > >> override def dbTableName = "Source" > > > > >> } > > > > >> /------------------------------- code ends > > > > >> My only problem now is that I can't figure out how to implement the > > > >> following: > > > > >> A Discovery (a mapped class) needs to have a foreign key to the source > > > >> that made the discovery, this could be either a lab or a scientist, so > > > >> normally i would have a field with a reference to the super-class of > > > >> both Scientist and Lab - However, I don't have a super-class, I just > > > >> have a trait :) > > > > >> I would like to be able to write something like this: > > > > >> /------------------------------- code starts again > > > > >> class Discovery extends LongKeyedMapper[Discovery] with IdPK { > > > > >> def getSingleton = Discovery > > > > >> // primatives > > > >> object description extends MappedDateTime(this) > > > >> object year extends MappedInt(this) > > > >> object reference extends MappedPoliteString(this, 128) > > > > >> // relationships > > > >> object source extends MappedLongForeignKey(this, > > > >> BaseSourceTrait) // > > > >> <-- this is what i want. > > > > >> } > > > > >> object Discovery extends Discovery with LongKeyedMetaMapper[Discovery] > > > > >> /------------------------------- code ends > > > > >> As always I truely appreciate the help you guys are giving me :) > > > > >> Thanks, > > > >> Mads Hartmann Jensen > > > > >> On Feb 4, 9:56 pm, David Pollak <[email protected]> wrote: > > > > >>> Please take a look at the MegaProtoUser and MegaMetaProtoUser code for > > > >>> examples of how to create traits that can be mixed into classes. > > > > >>> Does that help? > > > > >>> On Thu, Feb 4, 2010 at 9:58 AM, Mads Hartmann Jensen > > > >>> <[email protected]>wrote: > > > > >>>> hello Jeppe, > > > > >>>> In my project I've got the following three models: A discovery, a > > > >>>> Scientist > > > >>>> and a lab. The Discovery has been invented by someone, this is > > > >>>> either a > > > >>>> single scientist or sometimes a lab - This is easily done through > > > >>>> inheritance (would create a superclass named source) but I'm not > > > >>>> sure how to > > > >>>> do this so it maps nicely to the database. > > > > >>>> Scientist and Lab only share one attribute so what I'm most > > > >>>> interested in > > > >>>> is to be able express that a Discovery has s source that can be > > > >>>> either a lab > > > >>>> or scientist :) > > > > >>>> Hope this explains my problem more clearly, thanks for the help > > > > >>>> Mads Hartmann > > > > >>>> Sent from my iPhone > > > > >>>> On 04/02/2010, at 18.17, Jeppe Nejsum Madsen <[email protected]> > > > >>>> wrote: > > > > >>>> Mads Hartmann <[email protected]> writes: > > > > >>>>> Hello Everyone, > > > > >>>>>> I'm currently trying to figure out how to map objects with > > > >>>>>> inheritance > > > >>>>>> using the Mapper framework. I've got a Lab and a Scientist who > > > >>>>>> inherit > > > >>>>>> from Source. > > > > >>>>>> As I understand there's no direct way to do inheritance using the > > > >>>>>> Mapper framework so I'm trying to figure out how to implement > > > >>>>>> 'Single > > > >>>>>> Table Inheritance'. > > > > >>>>>> Right now I'm trying to create a single trait (Source) for the > > > >>>>>> values > > > >>>>>> that they share called BaseSource and my idea is to mix it in both > > > >>>>>> Lab > > > >>>>>> and Scientist. I would then define the table name of both scientist > > > >>>>>> and lab to be the same - I think this would work but what I'm not > > > >>>>>> sure > > > >>>>>> of is the following: > > > > >>>>>> - If both Scientist and Lab mixes in the IdPK trait and use the > > > >>>>>> same > > > >>>>>> table, will the id still be unique? > > > >>>>>> - A Discovery has a source, how do i create MappedLongForeignKey to > > > >>>>>> the table they share (lab, scientist)? > > > > >>>>>> I hope you'll be able to help me out :) > > > > >>>>> I can't say I follow the above :-) Do you want to share tables, > > > >>>>> code or > > > >>>>> both? Maybe list the table structure and explain how you would like > > > >>>>> to > > > >>>>> map it.... > > > > >>>>> /Jeppe > > > > >>>>> -- > > > >>>>> You received this message because you are subscribed to the Google > > > >>>>> Groups > > > >>>>> "Lift" group. > > > >>>>> To post to this group, send email to [email protected]. > > > >>>>> To unsubscribe from this group, send email to > > > >>>>> [email protected]<liftweb%[email protected] > > > >>>>> > > > > >>>>> . > > > >>>>> For more options, visit this group at > > > >>>>>http://groups.google.com/group/liftweb?hl=en. > > > > >>>> -- > > > >>>> You received this message because you are subscribed to the Google > > > >>>> Groups > > > >>>> "Lift" group. > > > >>>> To post to this group, send email to [email protected]. > > > >>>> To unsubscribe from this group, send email to > > > >>>> [email protected]<liftweb%[email protected] > > > >>>> > > > > >>>> . > > > >>>> For more options, visit this group at > > > >>>>http://groups.google.com/group/liftweb?hl=en. > > > > >>> -- > > > >>> Lift, the simply functional web frameworkhttp://liftweb.net > > > >>> Beginning Scalahttp://www.apress.com/book/view/1430219890 > > > >>> Follow me:http://twitter.com/dpp > > > >>> Surf the harmonics > > > > >> -- > > > >> You received this message because you are subscribed to the Google > > > >> Groups "Lift" 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 > > > >> athttp://groups.google.com/group/liftweb?hl=en. > > > > > -- > > > > You received this message because you are subscribed to the Google > > > > Groups "Lift" 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 > > > > athttp://groups.google.com/group/liftweb?hl=en. > > > > -- > > > You received this message because you are subscribed to the Google Groups > > > "Lift" 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 > > > athttp://groups.google.com/group/liftweb?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "Lift" group. > > To post to this > > ... > > read more » -- You received this message because you are subscribed to the Google Groups "Lift" 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/liftweb?hl=en.
