GORM 查询多个集合
Posted
技术标签:
【中文标题】GORM 查询多个集合【英文标题】:GORM Querying multiple collections 【发布时间】:2014-08-09 09:43:45 【问题描述】:我正在使用 Grails 和 MongoDB。我有两个域类 User 和 AddWebsite。一个用户有很多网站,每个网站都属于一个用户。 领域类如下:
class AddWebsite
String website
User user
static belongsTo = [user: User]
static constraints =
website url:true
user nullable:true
Other domain类如下:
class User
String login
String password
static hasMany = [
addWebsites: AddWebsite
]
static mapping =
addWebsites cascade:"all-delete-orphan"
static constraints =
我需要根据当前登录的用户查询 AddWebsite 表并获取该特定用户的网站。任何人都可以提出任何方法吗?
【问题讨论】:
【参考方案1】:我使用了这种方法。可能不是最有效的,但它确实有效。
def showWebsites()
def p = User.findByLogin(session["user"].login)
def websites = AddWebsite.findAllByUser(p['_id'])
[websitesList: websites]
在我的 GSP 中,我有:
<g:select name="websiteSelection" from="$websitesList.website " />
【讨论】:
【参考方案2】:You need to create a createCriteria List as follow
def c = AddWebsite.createCriteria()
def results = c.list
//find the user based on the relationship
user
ideq(userobj?.id.toLong())
//you can user projection here if u need a single value
【讨论】:
【参考方案3】:我没有使用过 MongoDB,但由于 GORM 支持它,我假设一个示例查询可以满足您的需求:
AddWebsite.findAllByUser(userObj)
如果您只是想要网站字符串,那么这应该可以:
def userWebsites = AddWebsite.findAllByUser(userObj)*.website
其中 userWebsites 将是 List<String>
请参阅http://grails.org/doc/latest/ref/Domain%20Classes/findAllBy.html 了解更多信息。
顺便说一句,您的 AddWebsite 类中不需要“用户用户”,因为您已在 belongsTo 中命名为“用户”。
【讨论】:
感谢您的链接。它真的很有用。以上是关于GORM 查询多个集合的主要内容,如果未能解决你的问题,请参考以下文章
使用 GORM 获取 Mongo 集合时,找不到能够从 java.lang.Double 类型转换为 java.lang.Long 类型的转换器