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 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].
For more options, visit this group at
http://groups.google.com/group/liftweb?hl=en.