0

私は5つのテーブルを持っています:

User (Mark)
Enterprise (Google)
EnterpriseUser (Mark,  Google)
EnterpriseRight (LOGIN)
EnterpriseUserRight (Mark-Google, LOGIN)

GORM を使用して、Mark (現在のユーザー) が LOGIN 権限を持っているすべての企業のデータベースを照会したいと考えています。次に、結果を並べ替えてページ番号を付けたいと思います。

以前はリストを作成してそれを行っていましたが、ResultSet を返すことを参照します (これはまだ並べ替え/ページ分割/クエリを実行できます)。

私の User.class (ドメイン オブジェクト) の試行 (List<Enterprise> の生成)

public List<Enterprise>getEnterprises() {
    def list = new ArrayList<Enterprise>()
    for (EnterpriseUser eu: this.enterpriseUsers) {
        if (this.hasEnterpriseRights(eu.enterprise, [EnterpriseRight.LOGIN])) {
            list.add(eu.enterprise)
        }
    }
    return list
}

(ただし、これらの結果はリストになっているため、並べ替えやページ付けを行うことはできません。このクエリが結果セットを返すことができればいいと思います)

英語で:

このユーザーが文字列名「LOGIN」を持つ、これにEnterprise関連付けられているすべてを検索します。アルファベット順にリストします。オフセット 10 から 10 個の結果を出してください。UserEnterpriseRight

ここにコードを投稿しますが、どこから始めればよいかわかりません。

ドメイン オブジェクトは次のとおりです。

class User {

    static hasMany = [userSystemRights: UserSystemRight, enterpriseUsers: EnterpriseUser]

    String email;   
    String passwordHash;
}    

class Enterprise {

    static hasMany = [enterpriseUsers: EnterpriseUser, measurements: Measurement]

    String name = ""
    String tradingName = ""
}

class EnterpriseUser {

    static belongsTo = [enterprise: Enterprise, user: User]
    static hasMany = [enterpriseUserRights: EnterpriseUserRight]

    Enterprise enterprise
    User user
    String interest
}

class EnterpriseUserRight {

    static belongsTo = [enterpriseUser: EnterpriseUser, enterpriseRight: EnterpriseRight]

    EnterpriseUser enterpriseUser
    EnterpriseRight enterpriseRight

}

class EnterpriseRight {

    public static final String LOGIN = "LOGIN"
    public static final String MANAGE_USERS = "MANAGE_USERS"
    public static final String MANAGE_SETTINGS = "MANAGE_SETTINGS"

    static hasMany = [enterpriseUserRights: EnterpriseUserRight]    

    String name
}
4

1 に答える 1

2

Grails にもクエリ用の特別な DSL があるかどうかはわかりませんが、HQL では次のようにします。

select distinct enterprise from EnterpriseUserRight enterpriseUserRight
inner join enterpriseUserRight.enterpriseRight enterpriseRight
inner join enterpriseUserRight.enterpriseUser enterpriseUser
inner join enterpriseUser.enterprise enterprise
where enterpriseRight.name = 'LOGIN'
and enterpriseUser.user = :user
order by enterprise.name
于 2012-12-10T08:14:42.543 に答える