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.

Reply via email to