Я посмотрел это. Похоже, что соединения выполняются на уровне объекта.
Экстраполировано от http://exploring.liftweb.net/master/index-8.html до вашего случая:
// Accessing foreign objects
class Employee extends LongKeyedMapper[Employee] with IdPK {
...
object department extends MappedLongForeignKey(this, Department)
def departmentName =
Text("My department is " + (department.obj.map(_.name.is) openOr "Unknown"))
}
class Department ... {
...
def entries = Employee.findAll(By(Employee.department, this.id))
}
Если вы хотите выполнить сопоставление «многие ко многим», вам нужно предоставить собственное
Класс «join» с внешними ключами для ваших сопоставленных объектов.
// DepartmentId Entity
class DepartmentId extends LongKeyedMapper[DepartmentId] with IdPK {
def getSingleton = DepartmentId
object name extends MappedString(this,100)
}
object DepartmentId extends DepartmentId with LongKeyedMetaMapper[DepartmentId] {
override def fieldOrder = List(name)
}
Далее мы определяем нашу сущность соединения, как показано ниже.
Это LongKeyedMapper, как и все остальные объекты,
но он содержит только поля внешнего ключа для других объектов.
// Join Entity
class DepartmentIdTag extends LongKeyedMapper[DepartmentIdTag] with IdPK {
def getSingleton = DepartmentIdTag
object departmentid extends MappedLongForeignKey(this,DepartmentId)
object Employee extends MappedLongForeignKey(this,Employee)
}
object DepartmentIdTag extends DepartmentIdTag with LongKeyedMetaMapper[DepartmentIdTag] {
def join (departmentid : DepartmentId, tx : Employee) =
this.create.departmentid(departmentid).Employee(tx).save
}
Чтобы использовать объект объединения, вам нужно создать новый экземпляр и установить
соответствующие внешние ключи для указания на связанные экземпляры. Как видите,
для этого мы определили удобный метод для нашего мета-объекта Expense.
Чтобы сделать многие-ко-многим доступными в качестве поля на наших объектах, мы можем использовать
Черта HasManyThrough, как показано ниже
// HasManyThrough for Many-to-Many Relationships
class Employee ... {
object departmentids extends HasManyThrough(this, DepartmentId,
DepartmentIdTag, DepartmentIdTag.departmentid, DepartmentIdTag.Employee)
}