Scala 如何在Lagom中使用Akka持久性进行DB反向查找?
我正在使用Lagom构建令牌身份验证微服务,但遇到了问题。我的数据模型当前是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
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