簡體   English   中英

grails mongodb 3.0.2插件使用createCriteria()對關聯進行聯接查詢

[英]grails mongodb 3.0.2 plugin join queries on associations using createCriteria()

我正在嘗試使用createCriteria()搜索具有特定角色的用戶。我有三個域類:User,Role和UserRole(它們來自SpringSecurity)。

class UserRole implements Serializable {

    User user
    Role role

    static constraints = {
        user nullbale: false
        role nullable: false
    }

    static mapping = {
        version: false
        id composite: ['role', 'user']
    }
}

我正在搜索用戶域上的isActive,名稱或用戶名字段以及角色域上的權限字段。

    def c = UserRole.createCriteria()
    def results = c {
        user {
            eq("isActive", true)
            or {
                ilike("name", "somename")
                ilike("username", "someusername")
            }
        }
        role {
            eq("authority", "ROLE_USER")
        }
    }

運行此程序時,我從mongo插件獲取UnsupportedOperationException。 這是stacktrace

ERROR errors.GrailsExceptionResolver  - UnsupportedOperationException occurred when processing request: [GET] /users/search - parameters:
query: 
Join queries are not supported by MongoDB. Stacktrace follows:
Message: Join queries are not supported by MongoDB
    Line | Method
->>  162 | handle             in org.grails.datastore.mapping.mongo.query.MongoQuery$2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    142 | handle             in     ''
|   1091 | populateMongoQuery in org.grails.datastore.mapping.mongo.query.MongoQuery
|    993 | executeQuery       in org.grails.datastore.mapping.mongo.query.MongoQuery$58
|    861 | doInDB . . . . . . in     ''
|    833 | doInDB             in     ''
|    542 | list . . . . . . . in org.grails.datastore.mapping.query.Query
|    325 | invokeMethod       in grails.gorm.CriteriaBuilder
|     17 | $tt__searchUsers . in com.themopi.apis.searchactivity.SearchService
|     29 | searchUser         in com.themopi.apis.search.SearchController
|    198 | doFilter . . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter           in grails.plugin.cache.web.filter.AbstractFilter
|    106 | processFilterChain in com.odobo.grails.plugin.springsecurity.rest.RestTokenValidationFilter
|     72 | doFilter           in     ''
|     53 | doFilter . . . . . in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
|   1145 | runWorker          in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run                in java.lang.Thread

我在此問題上找到了一個Jira ,但尚未解決。

到目前為止,由於jira是在2012年3月9日創建的,因此目前尚無解決方法,或者我錯過了一些東西?

我將在此查詢中使用分頁和投影嗎?

任何幫助或指導都將受到高度贊賞。

提前致謝。

伯特(Burt)一篇關於該主題的出色文章

它的主要部分之一是,應使用embedded/sub-doc entities來實現安全模型。 實際上,聯接根本不應該與mongo一起使用,如果需要,請使用RDBMS或Graph DB。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM