Nano Hash - криптовалюты, майнинг, программирование

Запрещен ли applicationContext в качестве имени свойства домена в Grails 2.4.3?

После перехода с Grails 2.2.4 на 2.4.3 класс домена со свойством с именем applicationContext выдает исключения при использовании этого свойства в запросах критериев.

class WebResource {
     String applicationContext
}

class ResourceService {
  public WebResource getResourceByContext(String ctx) {
     WebResource.withCriteria() {
         eq('applicationContext', ctx)
     }
  }
}

Вызов getResourceByContext () вызывает исключение:

    org.hibernate.QueryException: could not resolve property: applicationContext of: org.mydomain.WebResource
 at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)
        at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77)
        at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1995)
        at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:61)
        at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1970)
        at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:518)
        at org.hibernate.loader.criteria.CriteriaQueryTranslator.findColumns(CriteriaQueryTranslator.java:534)
        at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:82)
        at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:417)
        at org.hibernate.loader.criteria.CriteriaJoinWalker.(CriteriaJoinWalker.java:123)
        at org.hibernate.loader.criteria.CriteriaJoinWalker.(CriteriaJoinWalker.java:92)
        at org.hibernate.loader.criteria.CriteriaLoader.(CriteriaLoader.java:97)
        at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1663)
        at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380)
        at org.codehaus.groovy.grails.orm.hibernate.query.AbstractHibernateCriteriaBuilder.invokeMethod(AbstractHibernateCriteriaBuilder.java:1639)
        at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:907)
        at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:884)
        at org.grails.datastore.gorm.GormStaticApi$_withCriteria_closure11.doCall(GormStaticApi.groovy:304)
        at sun.reflect.GeneratedMethodAccessor254.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016)
        at groovy.lang.Closure.call(Closure.java:423)
        at org.codehaus.groovy.runtime.ConvertedClosure.invokeCustom(ConvertedClosure.java:51)
        at org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:81)
        at com.sun.proxy.$Proxy29.doInSession(Unknown Source)
        at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:302)
        at org.grails.datastore.gorm.AbstractDatastoreApi.execute(AbstractDatastoreApi.groovy:37)
        at org.grails.datastore.gorm.GormStaticApi.withCriteria(GormStaticApi.groovy:303)
        at org.mydomain.WebResource.withCriteria(WebResource.groovy)

Разве в Grails 2.4.3 запрещено иметь свойства домена с именем applicationContext? Я не нашел упоминания о запрете этого сценария в примечаниях к выпуску Grails, руководствах по обновлению или JIRA. Я решил эту проблему, переименовав поле и заменив ссылки GORM на новое имя:

class WebResource {
    String appContext
    appContext column: 'APPLICATION_CONTEXT'
    public String getApplicationContext() {
        return appContext
    }

    public void setApplicationContext(String c) {
        appContext = c
    }
}

Ответы:


1

Учитывая конфликт имен с Spring ApplicationContext, я подозреваю, что вы уже нашли лучший ответ - назовите свойство как-нибудь иначе и используйте определение mapping для установки имени столбца базы данных. Я бы порекомендовал вам не добавлять пару геттер / сеттер, а просто использовать имя свойства appContext непосредственно в коде, поскольку в ядре Grails или плагинах есть более чем вероятные места, которые предполагают (вполне разумно в мое мнение), что свойство с именем applicationContext является объектом Spring, а не чем-либо еще.

Не борись с условностями, если только в этом нет необходимости.

03.09.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..