繁体   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