考虑一个假设的情况,我有两个模型:Company
和User
,定义如下
case class Company(name: String) extends Model {
@Id
var id: Long = _
@OneToMany(fetch = FetchType.LAZY)
var admins: util.List[User] = new util.ArrayList[User]()
}
case class User(email: String) {
@Id
var id: Long = _
}
接下来,我有一个请求,我想检查user_id
200是否是company_id
100的管理员。显而易见的解决方案是获取具有该ID的公司,然后检查如果admins
,则在user_id
列表中迭代地进行迭代但效率非常低。最好的方法是什么?
答案 0 :(得分:1)
我认为解决此问题的最简单方法是简单地添加用户与公司之间的关系。如果你需要调用这样的查询,那么这种关系是有意义的:
以下是添加到User class的关系:
@ManyToOne
var company:Company = _
以下是如何检查用户(id = 200)是否为公司管理员(id = 100)的示例:
val user = Ebean.find(classOf[User], 200L)
println(user.company.id==100L)
这里的第二个选项是使用RawSql。我们可以用类似的方式做到这一点:
val sql="select u.company_id as id from user u where u.id=200"
val rawSql = RawSqlBuilder.parse(sql).create()
val query = Ebean.find(classOf[Company])
query.setRawSql(rawSql)
val list = query.findList()
println(list(0).id==100L)