Scala 如何在Lagom中使用Akka持久性进行DB反向查找?

Scala 如何在Lagom中使用Akka持久性进行DB反向查找?,scala,akka,lagom,Scala,Akka,Lagom,我正在使用Lagom构建令牌身份验证微服务,但遇到了问题。我的数据模型当前是 table Token ( groupName varchar(255) PK, token varchar(255) (logical UUID type) ) 我有三种方法,createToken、getToken和validateToken。前两个采用一个组名,该名称很好地映射到中列出的实体id。 第三种方法在请求体中获取一个令牌,如果成功,则返回一个带有groupName和令牌的json负载 Lago

我正在使用Lagom构建令牌身份验证微服务,但遇到了问题。我的数据模型当前是

table Token (
  groupName varchar(255) PK,
  token varchar(255) (logical UUID type)
)
我有三种方法,createToken、getToken和validateToken。前两个采用一个组名,该名称很好地映射到中列出的实体id。 第三种方法在请求体中获取一个令牌,如果成功,则返回一个带有groupName和令牌的json负载

Lagom抽象了实际的SQL,您可以通过如下操作访问持久层:val ref=persistenentEntityRegistry.refFor[DptokenEntity]groupName。实际的持久性代码如下所示:

class DptokenEntity extends PersistentEntity {

  override type Command = DptokenCommand[_]
  override type Event = DptokenEvent
  override type State = DptokenState

  override def initialState: DptokenState = DptokenState(None)

  override def behavior: Behavior = {
    case DptokenState(_) => Actions()
      .onCommand[PersistToken, TokenResponse] {
      case (PersistToken(token), ctx, state) =>
        ctx.thenPersist(TokenPersisted(token)) { _ =>
          ctx.reply(token)
        }
    }.onReadOnlyCommand[GetToken, TokenResponse] {
      case (GetToken(groupName), ctx, state) =>
        state.token match {
          case Some(token) => ctx.reply(token)
          case None => ctx.invalidCommand(s"No token exists for $groupName")
        }
    }.onEvent {
      case (TokenPersisted(token), _) => DptokenState(Some(token))
    }
  }
}

case class DptokenState(token: Option[TokenResponse])
我很难理解如何使用上述模型进行反向查找,因为如果我通过令牌查找实体,表面上会在数据库中得到一个新行,其中的关系是token->groupName,这会给更新带来大量问题,等等


我想先和好朋友们核实一下,所以在我撕掉事件来源材料并使用原始Slick之前。

你确定你需要CQR和Lagom实体吗? 如果您需要实现一个通过令牌查找实体的案例,那么需要使用Read-Side。但我不确定,Lagom PE是你的正确选择。尝试使用basic而不是Lagom PE