Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala slick模式-获取连接的表_Scala_Slick_Scalaquery - Fatal编程技术网

Scala slick模式-获取连接的表

Scala slick模式-获取连接的表,scala,slick,scalaquery,Scala,Slick,Scalaquery,用斯里克做我的第一步,我有这张桌子 case class Employee(name: String,last: String,department: Option[Int] = None,id: Option[Int] = None) class Employees (tag: Tag) extends Table[Employee](tag, "EMPLOYEES") { // Auto Increment the id primary key column def id = col

用斯里克做我的第一步,我有这张桌子

case class Employee(name: String,last: String,department: Option[Int] = None,id: Option[Int] = None)
class Employees (tag: Tag) extends Table[Employee](tag, "EMPLOYEES") {
  // Auto Increment the id primary key column
  def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
  def name = column[String]("NAME", O.NotNull)
  def last = column[String]("LAST", O.NotNull)
  def dept = foreignKey("EMP_FK",deptId,departments)(_.id)
  def * = (name,last,deptId.?, id.?) <> (Employee.tupled, Employee.unapply)
  val departments = TableQuery[Departments]
}
case class DepartmentManager(id:Int,name:String,manager:String)
case class Department(id:Option[Int],name:String,managerId:Int)
class Departments (tag: Tag) extends Table[Department](tag, "DEPARTMENTS") {
  val employees = TableQuery[Employees]
  def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
  def name = column[String]("NAME", O.NotNull)
  def managerId = column[Int]("MANAGER_ID", O.Nullable)
  def manager = foreignKey("EMP_FK",managerId,employees)(_.id)
  def * = (id.?,name,managerId) <> (Department.tupled, Department.unapply)
}
case class Employee(姓名:String,姓氏:String,部门:Option[Int]=None,id:Option[Int]=None)
类雇员(tag:tag)扩展表[Employee](tag,“Employees”){
//自动递增id主键列
def id=列[Int](“id”,O.PrimaryKey,O.AutoInc)
def name=列[字符串](“名称”,O.NotNull)
def last=列[字符串](“last”,O.NotNull)
def dept=外键(“EMP_FK”,deptId,departments)(.id)
def*=(姓名、姓氏、部门号、id号)(Employee.tuple、Employee.unapply)
val部门=表格查询[部门]
}
案例类部门经理(id:Int,name:String,manager:String)
案例类部门(id:Option[Int],name:String,managerId:Int)
类部门(标记:标记)扩展表[部门](标记,“部门”){
val员工=TableQuery[员工]
def id=列[Int](“id”,O.PrimaryKey,O.AutoInc)
def name=列[字符串](“名称”,O.NotNull)
def managerId=列[Int](“管理器ID”,O.Nullable)
def manager=foreignKey(“EMP_FK”,managerId,employees)(uu.id)
def*=(id.?,名称,managerId)(Department.tuple,Department.unapply)
}
但我得到了编译错误:

查询[Nothing,Nothing,Seq]类型的表达式不符合 预期类型列表[部门经理]

我尝试过这样做(只是为了检查,我知道这很糟糕):

def all:List[DepartmentManager]=db.withSession{implicit session=>
val employees=TableQuery[employees]
val x=用于{
(d,e)部门经理(t.'u 1,t.'u 2,t.'u 3)).托利斯
}
但它并没有给我想要的结果——后者的结果(t.'u 1,t.'u 2,t.'u 3)看起来像

(1,Foo,(雇员路径@1076478352._2).姓名(雇员路径) @1076478352._2).最后一次)

请告知案例类员工(姓名:String,姓氏:String,部门:Option[Int]=None,id:Option[Int]=None)
case class Employee(name: String, last: String, department: Option[Int] = None, id: Option[Int] = None)

class Employees (tag: Tag) extends Table[Employee](tag, "EMPLOYEES") {
    // Auto Increment the id primary key column
    val departments = TableQuery[Departments]

    def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
    def name = column[String]("NAME", O.NotNull)
    def last = column[String]("LAST", O.NotNull)
    def deptId = column[Int]("DEPARTMENT", O.NotNull)

    def deptFK = foreignKey("EMP_DEP_FK", deptId, departments)(_.id)

    def * = (name, last, deptId.?, id.?) <>(Employee.tupled, Employee.unapply)
}

case class DepartmentManager(id: Int, name: String, manager: String)

case class Department(id: Option[Int], name: String, managerId: Int)

class Departments (tag: Tag) extends Table[Department](tag, "DEPARTMENTS") {
    val employees = TableQuery[Employees]
    def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
    def name = column[String]("NAME", O.NotNull)
    def managerId = column[Int]("MANAGER_ID", O.Nullable)

    def managerFK = foreignKey("DEP_MAN_FK", managerId, employees)(_.id)

    def * = (id.?, name, managerId) <>(Department.tupled, Department.unapply)
}


def all(implicit s: Session): List[DepartmentManager] = {
    val employees = TableQuery[Employees]
    val x = for {
        (d, e) <- departments join employees on (_.managerId === _.id)
    } yield (d.id, d.name, e.name + " " + e.last)

    x.list.map(t => DepartmentManager(t._1, t._2, t._3))
}
类雇员(tag:tag)扩展表[Employee](tag,“Employees”){ //自动递增id主键列 val部门=表格查询[部门] def id=列[Int](“id”,O.PrimaryKey,O.AutoInc) def name=列[字符串](“名称”,O.NotNull) def last=列[字符串](“last”,O.NotNull) def deptId=列[Int](“部门”,O.NotNull) def deptFK=外键(“EMP_DEP_FK”,deptId,departments)(.id) def*=(姓名、姓氏、部门号、id号)(Employee.tuple、Employee.unapply) } 案例类部门经理(id:Int,name:String,manager:String) 案例类部门(id:Option[Int],name:String,managerId:Int) 类部门(标记:标记)扩展表[部门](标记,“部门”){ val employees=TableQuery[employees] def id=列[Int](“id”,O.PrimaryKey,O.AutoInc) def name=列[字符串](“名称”,O.NotNull) def managerId=列[Int](“管理器ID”,O.Nullable) def managerFK=foreignKey(“副经理、经理、员工”)(.id) def*=(id.?,名称,managerId)(Department.tuple,Department.unapply) } def all(隐式s:会话):列表[部门经理]={ val employees=TableQuery[employees] val x=用于{ (d、e)部门经理(t._1、t._2、t._3)) }
您需要隐式
会话
对象来调用查询中的
列表
迭代器
方法。

谢谢,我已经在会话中编辑了我的问题,但经理名称的结果如下所示:(EMPLOYEES Path@1076478352.\u 2).name(EMPLOYEES Path@1076478352.\u 2).LAST
case class Employee(name: String, last: String, department: Option[Int] = None, id: Option[Int] = None)

class Employees (tag: Tag) extends Table[Employee](tag, "EMPLOYEES") {
    // Auto Increment the id primary key column
    val departments = TableQuery[Departments]

    def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
    def name = column[String]("NAME", O.NotNull)
    def last = column[String]("LAST", O.NotNull)
    def deptId = column[Int]("DEPARTMENT", O.NotNull)

    def deptFK = foreignKey("EMP_DEP_FK", deptId, departments)(_.id)

    def * = (name, last, deptId.?, id.?) <>(Employee.tupled, Employee.unapply)
}

case class DepartmentManager(id: Int, name: String, manager: String)

case class Department(id: Option[Int], name: String, managerId: Int)

class Departments (tag: Tag) extends Table[Department](tag, "DEPARTMENTS") {
    val employees = TableQuery[Employees]
    def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
    def name = column[String]("NAME", O.NotNull)
    def managerId = column[Int]("MANAGER_ID", O.Nullable)

    def managerFK = foreignKey("DEP_MAN_FK", managerId, employees)(_.id)

    def * = (id.?, name, managerId) <>(Department.tupled, Department.unapply)
}


def all(implicit s: Session): List[DepartmentManager] = {
    val employees = TableQuery[Employees]
    val x = for {
        (d, e) <- departments join employees on (_.managerId === _.id)
    } yield (d.id, d.name, e.name + " " + e.last)

    x.list.map(t => DepartmentManager(t._1, t._2, t._3))
}