【问题标题】:grails mongodb 3.0.2 plugin join queries on associations using createCriteria()grails mongodb 3.0.2 插件使用 createCriteria() 加入关联查询
【发布时间】:2014-09-19 07:57:17
【问题描述】:

我正在尝试使用 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。这是堆栈跟踪

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 日创建的,因此是否有任何解决方法,或者我遗漏了什么?

我将在此查询中使用分页和投影?

非常感谢任何帮助或指导。

提前致谢。

【问题讨论】:

  • 我什至尝试从 UserRole 中删除该映射元素,但它仍然不起作用,我们也不能这样做,因为我们的用户功能工作正常。

标签: mongodb grails grails-orm grails-2.4


【解决方案1】:

关于这个话题有一个很好的article from Burt

其中一个主要部分是,安全模型应使用embedded/sub-doc entities 实现。实际上,连接根本不应该与 mongo 一起使用,如果需要,请使用 RDBMS 或 Graph DB。

【讨论】:

    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多