2012-02-18 1 views
0

UPDATE : 내 현재 상황을 반영하기 위해 샘플을 변경리프트 매퍼 - OneToMany 맵핑 특성

상당히 들어 올릴 새로운 내 응용 프로그램에 대한 모델을 만들려고하고 있습니다. DRY 정신을 유지하기 위해 필자는 특성 믹스를 사용하여 모델의 일부 필드를 지정하려고합니다. 나는 직원 한 매핑 많은 contactInfos이 볼 수 있듯이

trait Person[T <: LongKeyedMapper[T]] extends LongKeyedMapper[T]{ 
    self: T => 
    object firstName extends MappedString[T](this, 50) 
    object lastName extends MappedString[T](this, 50) 
    object civicRegNumber extends MappedString[T](this, 12) 
} 

class Employee extends IdPK with OneToMany[Long, Employee] with Person[Employee] { 
    def getSingleton = Employee 

    object contactInfos extends MappedOneToMany(EmployeeContactInfo, EmployeeContactInfo.person) 
} 

object Employee extends Employee with LongKeyedMetaMapper[Employee] 

: 예를 들어, 나는 내 Employee 클래스에 믹스 인 Person 특성을 가지고있다. 이것은 작동하는 것 같다,하지만 난 내 Person 특성에 contactInfos 객체를 이동하고자하는

trait PersonContactInfo[T <: LongKeyedMapper[T],P <: Person[P]] extends LongKeyedMapper[T] { 
    self: T => 
    object email extends MappedEmail[T](this, 80) 
    def personMeta:P with LongKeyedMetaMapper[P] 
    object person extends LongMappedMapper[T,P](this, personMeta) 
} 

class EmployeeContactInfo extends IdPK with PersonContactInfo[EmployeeContactInfo, Employee] { 
    def getSingleton = EmployeeContactInfo 
    val personMeta = Employee 

} 
object EmployeeContactInfo extends EmployeeContactInfo with LongKeyedMetaMapper[EmployeeContactInfo] 

: 것 같습니다. 그러나, 나는 이것을 달성하는 방법을 알아낼 수 없다 ... 특성에서 OneToMany 매핑을 상속하는 것이 가능한가? 도움을 환영합니다!

답변

1

몇 번 시도한 후에 Person의 OneToMany 매핑을 수행하는 특성을 PersonContactInfo로 구분하여 작동하도록했습니다. 이것은 지금

trait Person[T <: Person[T]] extends LongKeyedMapper[T]{ 
    self: T => 
    object firstName extends MappedString[T](this, 50) 
    object lastName extends MappedString[T](this, 50) 
    object civicRegNumber extends MappedString[T](this, 12) 
} 

trait PersonToPersonContacts[P <: Person[P], PCI <: PersonContactInfo[PCI, P]] extends OneToMany[Long,P] { 
    self: P => 
    def contactInfoMeta:LongKeyedMetaMapper[PCI] with PCI 
    object contactInfos extends MappedOneToMany(contactInfoMeta, contactInfoMeta.person) 
} 

class Employee extends IdPK with Person[Employee] with PersonToPersonContacts[Employee, EmployeeContactInfo] { 
    def getSingleton = Employee 
    override def contactInfoMeta = EmployeeContactInfo 
} 
object Employee extends Employee with LongKeyedMetaMapper[Employee] 

보고 내 PersonContactInfo 지금 모습입니다 같은 : 아직도

trait PersonContactInfo[T <: LongKeyedMapper[T],P <: Person[P]] extends LongKeyedMapper[T] { 
    self: T => 
    object email extends MappedEmail[T](this, 80) 
    def personMeta:P with LongKeyedMetaMapper[P] 
    object person extends LongMappedMapper[T,P](this, personMeta) 
} 

class EmployeeContactInfo extends IdPK with PersonContactInfo[EmployeeContactInfo, Employee] { 
    def getSingleton = EmployeeContactInfo 

    val personMeta = Employee 

} 
object EmployeeContactInfo extends EmployeeContactInfo with LongKeyedMetaMapper[EmployeeContactInfo] 

이이 문제를 해결하는 방법이지만, 성만이 작업을 수행 :)

를 확실하지