Scala &引用;尝试使用原始表对象";在查询中使用MappedProjection时出错

Scala &引用;尝试使用原始表对象";在查询中使用MappedProjection时出错,scala,slick,Scala,Slick,我试图找出如何在Slick中添加带有映射投影的查询,但无论我尝试了什么,我都会遇到以下错误: [error] (run-main) scala.slick.SlickException: Select(TableNode, "USER_NAME") found. This is typically caused by an attempt to use a "raw" table object directly in a query without introduc

我试图找出如何在Slick中添加带有映射投影的查询,但无论我尝试了什么,我都会遇到以下错误:

[error] (run-main) scala.slick.SlickException: 
    Select(TableNode, "USER_NAME") found. This is typically 
    caused by an attempt to use a "raw" table object directly 
    in a query without introducing it through a generator.
scala.slick.SlickException: Select(TableNode, "USER_NAME") 
    found. This is typically caused by an attempt to use a "raw" table 
    object directly in a query without introducing it through a generator.
    at scala.slick.ast.Select.<init>(Node.scala:340)
    at scala.slick.ast.Select.copy(Node.scala:338)
    at scala.slick.ast.Select.nodeRebuild(Node.scala:345)
    at scala.slick.ast.Select.nodeRebuild(Node.scala:338)
    at scala.slick.ast.UnaryNode$class.nodeRebuild(Node.scala:141)
    at scala.slick.ast.Select.nodeRebuild(Node.scala:338)
    at scala.slick.ast.SimpleNode$$anonfun$nodeMapChildren$1.apply(Node.scala:62)
    at scala.slick.ast.SimpleNode$$anonfun$nodeMapChildren$1.apply(Node.scala:62)
    at scala.Option.map(Option.scala:145)
    at scala.slick.ast.SimpleNode$class.nodeMapChildren(Node.scala:62)
    at scala.slick.ast.Select.nodeMapChildren(Node.scala:338)
    at scala.slick.compiler.Inline.scala$slick$compiler$Inline$$tr$1(Inline.scala:67)
    at scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
    at scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
    at scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:38)
    at scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:37)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
    at scala.slick.ast.Node$class.nodeMapNodes(Node.scala:37)
    at scala.slick.ast.ProductNode$$anon$3.nodeMapNodes(Node.scala:82)
    at scala.slick.ast.SimpleNode$class.nodeMapChildren(Node.scala:62)
    at scala.slick.ast.ProductNode$$anon$3.nodeMapChildren(Node.scala:82)
    at scala.slick.compiler.Inline.scala$slick$compiler$Inline$$tr$1(Inline.scala:67)
    at scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
    at scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
    at scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:38)
    at scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:37)
    at scala.collection.immutable.List.foreach(List.scala:309)
    at scala.slick.ast.Node$class.nodeMapNodes(Node.scala:37)
    at scala.slick.ast.Pure.nodeMapNodes(Node.scala:151)
    at scala.slick.ast.SimpleNode$class.nodeMapChildren(Node.scala:62)
    at scala.slick.ast.Pure.nodeMapChildren(Node.scala:151)
    at scala.slick.compiler.Inline.scala$slick$compiler$Inline$$tr$1(Inline.scala:67)
    at scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
    at scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
    at scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:38)
    at scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:37)
    at scala.collection.immutable.List.foreach(List.scala:309)
[错误](主运行)scala.slick.SlickException:
选择找到的(TableNode,“用户名”)。这通常是
由于试图直接使用“原始”表对象而导致
在查询中,不通过生成器引入它。
scala.slick.SlickException:选择(TableNode,“用户名”)
建立这通常是由于试图使用“原始”表造成的
对象,而无需通过生成器引入它。
在scala.slick.ast.Select处(Node.scala:340)
在scala.slick.ast.Select.copy(Node.scala:338)
在scala.slick.ast.Select.nodeRebuild(Node.scala:345)中
在scala.slick.ast.Select.nodeRebuild(Node.scala:338)中
位于scala.slick.ast.UnaryNode$class.nodeRebuild(Node.scala:141)
在scala.slick.ast.Select.nodeRebuild(Node.scala:338)中
在scala.slick.ast.SimpleNode$$anonfun$nodeMapChildren$1.apply(Node.scala:62)
在scala.slick.ast.SimpleNode$$anonfun$nodeMapChildren$1.apply(Node.scala:62)
位于scala.Option.map(Option.scala:145)
在scala.slick.ast.SimpleNode$class.nodeMapChildren(Node.scala:62)
在scala.slick.ast.Select.nodeMapChildren(Node.scala:338)中
在scala.slick.compiler.Inline.scala$slick$compiler$Inline$$tr$1(Inline.scala:67)
在scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
在scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
在scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:38)
在scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:37)
位于scala.collection.mutable.resizeblearray$class.foreach(resizeblearray.scala:59)
位于scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
位于scala.slick.ast.Node$class.nodeMapNodes(Node.scala:37)
在scala.slick.ast.ProductNode$$anon$3.nodeMapNodes(Node.scala:82)
在scala.slick.ast.SimpleNode$class.nodeMapChildren(Node.scala:62)
在scala.slick.ast.ProductNode$$anon$3.nodeMapChildren(Node.scala:82)
在scala.slick.compiler.Inline.scala$slick$compiler$Inline$$tr$1(Inline.scala:67)
在scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
在scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
在scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:38)
在scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:37)
位于scala.collection.immutable.List.foreach(List.scala:309)
位于scala.slick.ast.Node$class.nodeMapNodes(Node.scala:37)
在scala.slick.ast.Pure.nodeMapNodes(Node.scala:151)
在scala.slick.ast.SimpleNode$class.nodeMapChildren(Node.scala:62)
在scala.slick.ast.Pure.nodeMapChildren(Node.scala:151)
在scala.slick.compiler.Inline.scala$slick$compiler$Inline$$tr$1(Inline.scala:67)
在scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
在scala.slick.compiler.Inline$$anonfun$scala$slick$compiler$Inline$$tr$1$3.apply(Inline.scala:67)
在scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:38)
在scala.slick.ast.Node$$anonfun$nodeMapNodes$1.apply(Node.scala:37)
位于scala.collection.immutable.List.foreach(List.scala:309)
我是Scala和Slick的新手,我很难理解这些信息的含义。我认为这与此有关(摘自光滑的文档):

请注意,Slick在封面下克隆了表对象,因此不应该向它们添加任何额外的状态(不过额外的方法也可以)。还要确保表的实际对象未定义在静态位置(即在顶层或仅嵌套在其他对象中),因为这可能会在某些情况下由于scalac执行的过度优化而导致问题。对表使用val(使用匿名结构类型或单独的类定义)在任何地方都可以。

我已经修改了光滑的示例MultiDBCakeExample,使其看起来像下面的代码,并尝试了几种排列,但没有成功。下面的代码取自我的分叉版本的。这里有一个链接,指向just

package com.typesafe.slick.examples.lifed
导入scala.slick.driver.ExtendedProfile
导入scala.slick.session.session
导入scala.slick.driver.H2Driver
导入scala.slick.driver.SQLiteDriver
性状谱{
val配置文件:扩展配置文件
}
案例类图片(url:String,id:Option[Int]=None)
trait PictureComponent{this:Profile=>//需要在中混合一个配置文件。。。
导入profile.simple.\u//…以便能够导入profile.simple.\u
对象图片扩展表[(字符串,选项[Int])](“图片”){
//^表来自*当前*配置文件
def id=列[Option[Int]](“PIC_id”,O.PrimaryKey,O.AutoInc)
def url=列[String](“PIC_url”,O.NotNull)
def*=url~id
val autoInc=url返回id到{case(url,id)=>Picture(url,id)}
def插入(图片:图片)(隐式会话:会话):图片={
自动插入(picture.url)
}
}
}
案例类用户(名称:String,图片:picture,id:Option[Int]=None)
案例类UserAndPicId(名称:String,picId:Int)
trait UserComponent{this:Profile with PictureComponent=>//需要Profile和Picture(请参阅def insert)
导入profile.simple_
对象用户扩展表[(字符串,Int,选项[Int])](“用户”){
def id=列[Option[Int]](“用户id”,O.PrimaryKey,O.AutoInc)
def name=列[字符串](“用户名”,O.NotNull)
def pictureId=列[Int](“PIC_ID”,O.NotNull)
def*=名称~pictureId~id
def justNameAndPicId=name~pictureId(UserAndPicId,UserAndPicId.unapply)
专用def autoInc(隐式会话:会话
def userAndPicById = for {
  id <- Parameters[Int]
  user <- this if user.id === id
} yield justNameAndPicId