Как использовать namedQueries в Grails 1.3.7 с объектом, содержащим объект? - PullRequest
0 голосов
/ 22 февраля 2011

У меня есть эти классы:

class Category {
  Set usersLinked
  def hasMany = [usersLinked:CategoryUserLink]  
  static namedQueries = {
    getAuthorizedBusiness { auser ->
        eq "business", true
        usersLinked{
            eq "user", auser
            type{
                eq "name", "Authorized"
            }
        }            
    }
  }
}
class CategoryUserLink {
  User user
  CategoryType type
  Category category
}

Когда я запрашиваю его с помощью namedQuery или createCriteria, я получаю сообщение об ошибке:

Category.getAuthorizedBusiness(user).list()

Нет таких пользователей собственностиСсылка

Почему?

Я получаю это сообщение об ошибке:

 org.hibernate.QueryException: could not resolve property: userslinked of: lli.faqapp.domain.Category
    at grails.orm.HibernateCriteriaBuilder.invokeMethod(HibernateCriteriaBuilder.java:1223)
    at grails.orm.GormLabsHibernateCriteriaBuilder.super$3$invokeMethod(GormLabsHibernateCriteriaBuilder.groovy)
    at grails.orm.GormLabsHibernateCriteriaBuilder.methodMissing(GormLabsHibernateCriteriaBuilder.groovy:65)
    at lli.faqapp.domain.Category$__clinit__closure3_closure4.doCall(Category.groovy:84)
    at grails.orm.HibernateCriteriaBuilder.invokeClosureNode(HibernateCriteriaBuilder.java:1367)
    at grails.orm.HibernateCriteriaBuilder.invokeMethod(HibernateCriteriaBuilder.java:1117)
    at GormLabsGrailsPlugin$_registerCriteria_closure23_closure38.doCall(GormLabsGrailsPlugin.groovy:255)
    at lli.faqapp.domain.tests.CategoryTests.testSearchOnCategories(CategoryTests.groovy:39)

И после удаления плагина GormLabs я запускаю интеграционный тест и получаю это сообщение:

 org.hibernate.QueryException: could not resolve property: userslinked of: lli.faqapp.domain.Category
    at grails.orm.HibernateCriteriaBuilder.invokeMethod(HibernateCriteriaBuilder.java:1223)
    at lli.faqapp.domain.Category$__clinit__closure3_closure4.doCall(Category.groovy:84)
    at grails.orm.HibernateCriteriaBuilder.invokeClosureNode(HibernateCriteriaBuilder.java:1367)
    at grails.orm.HibernateCriteriaBuilder.invokeMethod(HibernateCriteriaBuilder.java:1117)
    at lli.faqapp.domain.tests.CategoryTests.testSearchOnCategories(CategoryTests.groovy:39)

1 Ответ

2 голосов
/ 22 февраля 2011

hasMany должен быть статическим - это свойство класса, а не конкретный экземпляр.Генерируемый им набор usersLinked зависит от экземпляра, но объявление hasMany предназначено для класса.

...