Запрос ассоциаций с коллекциями enum в Grails - PullRequest
2 голосов
/ 26 марта 2012

Я пытаюсь выполнить запрос в Grails 1.2.1, найти все продукты по типу арендатора.

Мое решение работает, но очень неэффективно, сначала я извлекаю все продукты, а затем нахожу все соответствующие результаты для данного арендатора.

Я нашел связанную ошибку в JIRA: Enum as collection

class Product {
    Set<TenantType> tenants
    static hasMany = [tenants: TenantType]
}

enum TenantType {
    BICYCLE,
    MOTORCYCLE
}

def tenant = TenantType.BICYCLE
Product.list().findAll { product -> tenant in product.tenants }

Есть ли более эффективный способ запроса этих данных?

Ответы [ 3 ]

3 голосов
/ 26 марта 2012

Аналогичный вопрос был задан здесь , и, как указано в ответе, похоже, что Hibernate не поддерживает запросы критериев для коллекций типов значений, таких как enums.Один из вариантов - вместо этого использовать hql-запрос:

Product.executeQuery('from Product p inner join p.tenants tenants
                      where tenants = :tenant', [tenant: TenantType.BICYCLE])
0 голосов
/ 18 октября 2017

Использование именованного запроса в классе Product что-то вроде

findByTenantType { tenantType->
        tenants{ eq 'value', tenantType}

    }

И затем получить доступ к этому именованному запросу, как этот -

def product = Product .findByTenantType(TenantType.BICYCLE).get()

см. Аналогичный блог - http://www.grailsbrains.com/search-parent-through-child-in-aggregation-relationship/

0 голосов
/ 17 октября 2017

Может быть выполнено без объединения:

Product.executeQuery('from Product where :tenant in elements(tenants)', [tenant: TenantType.BICYCLE])
...