我目前收到此错误,但我不太明白为什么:
exception during macro expansion: java.lang.IllegalStateException: Can't tokenize a non-scalar lifting. AgentService.this.agentsByOrganization(id).id
Long
在进行查询之前,我是否需要将 ID 转换为?我希望能够使用特定的 Id 类,但我是 Scala 的新手,不确定这是否可能。此外,并非所有查询都失败。例如,delete
作品,即使它也被传递一个AgentId
. 而该findByOrganization
方法不起作用。传递的其他方法AgentId
也显示与 相同的错误findByOrganization
。
模型:
case class AgentId(value: Long) extends AnyVal
case class OrganizationId(value: Long) extends AnyVal
case class Agent(
id: AgentId
, identifier: String
, organizationId: OrganizationId
, createdAt: LocalDateTime
, updatedAt: LocalDateTime
)
服务:
class AgentService(implicit val ex: ExecutionContext, val ctx: DBContext)
extends AgentsRepository {
import ctx._
def listByOrganization(id: OrganizationId): List[Agent] =
ctx.run(agentsByOrganization(id)) // this returns the error
def delete(agent: RichAgent): Unit = {
ctx.run(deleteAgent(agent)) // this doesn't
}
}
存储库:
trait AgentsRepository extends Repository {
import ctx._
def agentsByOrganization(id: OrganizationId) = quote { // error
query[Agent].filter(_.organizationId == lift(id))
}
def agentById(id: AgentId) = quote {
query[Agent].filter(_.id == lift(id))
}
def deleteAgent(agent: Agent) = quote { agentById(agent.id).delete }
}
D b
import io.getquill.{PostgresJdbcContext, SnakeCase}
package object db {
class DBContext(config: String) extends PostgresJdbcContext(SnakeCase, config)
trait Repository {
val ctx: DBContext
}
}
我见过这个类似的问题,但它似乎特定于Option
. 这是一个scastie 片段。