GORM查询多个集合

时间:2014-06-18 23:40:43

标签: mongodb grails join collections gorm

我正在使用Grails和MongoDB。我有两个域类User和AddWebsite。用户拥有多个网站,每个网站都属于一个用户。 域类如下:

class AddWebsite{
String website
User user
static belongsTo = [user: User]
static constraints = {
    website url:true
    user nullable:true
}
}

其他域类如下:

class User {
    String login
    String password
    static hasMany = [
        addWebsites: AddWebsite
    ]
    static mapping = {
        addWebsites cascade:"all-delete-orphan"
      }
    static constraints = {
        }
    }

我需要根据当前登录用户查询AddWebsite表并获取该特定用户的网站。有谁能建议任何方法?

3 个答案:

答案 0 :(得分:2)

我用这种方法。可能不是最有效但它有效。

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} " />

答案 1 :(得分:1)

我还没有使用过MongoDB,但是由于GORM支持它,我假设一个示例查询可以满足您的需求:

AddWebsite.findAllByUser(userObj)

如果您只是想要网站字符串,那么这应该有效:

def userWebsites = AddWebsite.findAllByUser(userObj)*.website

userWebsites将是List<String>

有关详细信息,请参阅http://grails.org/doc/latest/ref/Domain%20Classes/findAllBy.html

顺便说一下,你不需要&#34;用户用户&#34;在您的AddWebsite类中,因为您已命名&#34; user&#34;在你的belongsTo。

答案 2 :(得分:1)

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

    }