我与User和LinkedAccount之间存在一对多关系,一个User可以有多个链接帐户。
我LinkedAccount(id, provider_user_id, salt, provider_id, auth_method, avatar_url, User.findBy(user))
在解析器中加载LinkedAccount及其用户是没有问题的。
我不知道的是如何用LinkedAccounts加载用户。我想我需要让用户知道LinkedAccounts ..但是如何?
每当我想查找用户是否具有给定类型的链接帐户时,我都希望摆脱对数据库的一个额外的sql调用。目前,我确实喜欢这样:
def findLinkedAccountByUserAndProvider(userId: Pk[Long], providerId : String) = {
DB.withConnection {
implicit connection =>
SQL("select * from linked_account la where la.user_id = {userId} and la.provider_id = {providerId}")
.on("userId" -> userId, "providerId" -> providerId).as(LinkedAccount.simple.singleOpt)
}
}
还是当用户知道它的LinkedAccounts和LinkedAccount知道它的用户时,这会引起问题吗?
用户:
case class User(id: Pk[Long] = NotAssigned,
firstName: String,
lastName: String,
email: String,
emailValidated: Boolean,
lastLogin: DateTime,
created: DateTime,
modified: DateTime,
active: Boolean)
object User {
val simple = {
get[Pk[Long]]("id") ~
get[String]("first_name") ~
get[String]("last_name") ~
get[String]("email") ~
get[Boolean]("email_validated") ~
get[DateTime]("last_login") ~
get[DateTime]("created") ~
get[DateTime]("modified") ~
get[Boolean]("active") map {
case id ~ first_name ~ last_name ~ email ~ email_validated ~ last_login ~ created ~ modified ~ active =>
User(id, first_name, last_name, email, email_validated, last_login, created, modified, active)
}
}
}
关联帐户:
case class LinkedAccount(id: Pk[Long] = NotAssigned,
providerUserId: String,
salt: Option[String],
providerId: String,
authMethod: Option[String],
avatarUrl: Option[String],
user: User
)
object LinkedAccount {
val simple = {
get[Pk[Long]]("id") ~
get[String]("provider_user_id") ~
get[Option[String]]("salt") ~
get[String]("provider_id") ~
get[Option[String]]("auth_method") ~
get[Option[String]]("avatar_url") ~
get[Pk[Long]]("user_id") map {
case id ~ provider_user_id ~ salt ~ provider_id ~ auth_method ~ avatar_url ~ user =>
LinkedAccount(id, provider_user_id, salt, provider_id, auth_method, avatar_url, User.findBy(user))
}
}
}
由于我没有答案,因此我将提供自己的答案:
在案例类中,我定义:
case class User(id: Pk[Long] = NotAssigned,
firstName: String,
lastName: String,
email: String,
emailValidated: Boolean,
lastLogin: DateTime,
created: DateTime,
modified: DateTime,
active: Boolean) {
lazy val linkedAccounts: Seq[LinkedAccount] = DB.withConnection("test") { implicit connection =>
SQL(
"""
select * from linked_account la
join users on la.user_id = users.id
where la.id = {id}
"""
).on(
'id -> id
).as(LinkedAccount.simple *)
}
}
然后通过以下方式获取帐户:
val linkedAccounts = user.linkedAccounts
在这里找到这个
这是项目迁移 这是时间表 这样用户就可以迁移了 这是我的项目模型 这是我的时间表模型: 这是我的用户模型 现在,我从项目返回我的查询 这是可以的,但user_id用户在timesheets.user_id我不能得到它的时间表,并得到它 此控制器按时间表中的项目id返回项目和时间表,但时间表中的用户id我不知道如何将其输入系统
问题内容: 任何人都可以解释在设计带有示例的表时如何实现一对一,一对多和多对多关系吗? 问题答案: 一对一: 使用外键访问被引用的表: 您还必须在外键列()上设置唯一约束,以防止子表()中的多行与引用表()中的同一行相关。 一对多 :在关系的许多方面使用外键链接回“一个”侧: 多对多 :使用联结表(例如): 查询示例:
我正在学习冬眠,只是有点困惑。
生成的子实体映射器方法(缺少setChildren或,在我的例子中): 如何让映射器在子级中设置父级?
我正在使用Play Framework 2.1.0和Ebean,在查询下列场景时遇到问题: 我有3类表示数据库中的表。 使用Ebean,如何 > 是否检索项目列表中的所有子项目? 是否检索项目的所有小型项目? 给定子项目列表,如何检索所有小项目?
本文向大家介绍mybatis关系映射之一对多和多对一,包括了mybatis关系映射之一对多和多对一的使用技巧和注意事项,需要的朋友参考一下 本实例使用用户和订单的例子做说明: 一个用户可以有多个订单, 一个订单只对应一个用户。(其中应用到注释) 1.代码的结构 2. 建表语句: 3. 用户实体: 4. 订单实体: 5.写PersonMapper.java的接口 6. 一对多实体配置: Person