This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch 8.0.x-hibernate7-dev in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 4eae0967636472146dc787ee6f1300099305ddab Author: Walter Duque de Estrada <[email protected]> AuthorDate: Wed Mar 4 13:45:28 2026 -0600 change HibernateQueryConstants to HibernateQueryArgument --- .../groovy/grails/orm/CriteriaMethodInvoker.java | 8 +-- .../grails/orm/hibernate/HibernateDatastore.java | 23 ++++--- .../orm/hibernate/cfg/GrailsHibernateUtil.java | 57 ++++++++++++---- .../hibernate/query/GrailsHibernateQueryUtils.java | 63 +++++++++--------- .../orm/hibernate/query/HibernateHqlQuery.java | 15 ++--- .../hibernate/query/HibernateQueryArgument.java | 75 ++++++++++++++++++++++ .../hibernate/query/HibernateQueryConstants.java | 41 ++++++------ 7 files changed, 193 insertions(+), 89 deletions(-) diff --git a/grails-data-hibernate7/core/src/main/groovy/grails/orm/CriteriaMethodInvoker.java b/grails-data-hibernate7/core/src/main/groovy/grails/orm/CriteriaMethodInvoker.java index 1ab0d4a48c..9dae907053 100644 --- a/grails-data-hibernate7/core/src/main/groovy/grails/orm/CriteriaMethodInvoker.java +++ b/grails-data-hibernate7/core/src/main/groovy/grails/orm/CriteriaMethodInvoker.java @@ -31,7 +31,7 @@ import java.util.Collection; import java.util.Map; import org.grails.datastore.mapping.query.Query; import org.grails.orm.hibernate.query.HibernateQuery; -import org.grails.orm.hibernate.query.HibernateQueryConstants; +import org.grails.orm.hibernate.query.HibernateQueryArgument; import org.springframework.beans.BeanUtils; public class CriteriaMethodInvoker { @@ -104,11 +104,11 @@ public class CriteriaMethodInvoker { result = hibernateQuery.singleResult(); } else if (builder.isPaginationEnabledList()) { Map argMap = (Map) args[0]; - final String sortField = (String) argMap.get(HibernateQueryConstants.ARGUMENT_SORT); + final String sortField = (String) argMap.get(HibernateQueryArgument.SORT.value()); if (sortField != null) { final boolean ignoreCase = - !(argMap.get(HibernateQueryConstants.ARGUMENT_IGNORE_CASE) instanceof Boolean b) || b; - final String orderParam = (String) argMap.get(HibernateQueryConstants.ARGUMENT_ORDER); + !(argMap.get(HibernateQueryArgument.IGNORE_CASE.value()) instanceof Boolean b) || b; + final String orderParam = (String) argMap.get(HibernateQueryArgument.ORDER.value()); final Query.Order.Direction direction = Query.Order.Direction.DESC.name().equalsIgnoreCase(orderParam) ? Query.Order.Direction.DESC diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java index 94f6b27445..8c76d7909d 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java @@ -73,6 +73,7 @@ import org.grails.orm.hibernate.cfg.MappingCacheHolder; import org.grails.orm.hibernate.cfg.Settings; import org.grails.orm.hibernate.connections.HibernateConnectionSource; import org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory; +import org.grails.orm.hibernate.query.HibernateQueryArgument; import org.grails.orm.hibernate.connections.HibernateConnectionSourceSettings; import org.grails.orm.hibernate.event.listener.HibernateEventListener; import org.grails.orm.hibernate.event.listener.HibernateEventListener; @@ -119,15 +120,17 @@ public class HibernateDatastore extends AbstractDatastore MultipleConnectionSourceCapableDatastore { private static final Logger LOG = LoggerFactory.getLogger(HibernateDatastore.class); - /** The config property cache queries. */ - public static final String CONFIG_PROPERTY_CACHE_QUERIES = "grails.hibernate.cache.queries"; + /** @deprecated Use {@link HibernateQueryArgument#CONFIG_CACHE_QUERIES} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String CONFIG_PROPERTY_CACHE_QUERIES = HibernateQueryArgument.CONFIG_CACHE_QUERIES.value(); - /** The config property osiv readonly. */ - public static final String CONFIG_PROPERTY_OSIV_READONLY = "grails.hibernate.osiv.readonly"; + /** @deprecated Use {@link HibernateQueryArgument#CONFIG_OSIV_READONLY} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String CONFIG_PROPERTY_OSIV_READONLY = HibernateQueryArgument.CONFIG_OSIV_READONLY.value(); - /** The config property pass readonly to hibernate. */ - public static final String CONFIG_PROPERTY_PASS_READONLY_TO_HIBERNATE = - "grails.hibernate.pass.readonly"; + /** @deprecated Use {@link HibernateQueryArgument#CONFIG_PASS_READONLY} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String CONFIG_PROPERTY_PASS_READONLY_TO_HIBERNATE = HibernateQueryArgument.CONFIG_PASS_READONLY.value(); /** The session factory. */ protected final SessionFactory sessionFactory; @@ -537,11 +540,11 @@ public class HibernateDatastore extends AbstractDatastore setApplicationContext(applicationContext); } - this.osivReadOnly = config.getProperty(CONFIG_PROPERTY_OSIV_READONLY, Boolean.class, false); + this.osivReadOnly = config.getProperty(HibernateQueryArgument.CONFIG_OSIV_READONLY.value(), Boolean.class, false); this.passReadOnlyToHibernate = - config.getProperty(CONFIG_PROPERTY_PASS_READONLY_TO_HIBERNATE, Boolean.class, false); + config.getProperty(HibernateQueryArgument.CONFIG_PASS_READONLY.value(), Boolean.class, false); this.isCacheQueries = - config.getProperty(CONFIG_PROPERTY_CACHE_QUERIES, Boolean.class, false); + config.getProperty(HibernateQueryArgument.CONFIG_CACHE_QUERIES.value(), Boolean.class, false); if (config.getProperty(SETTING_AUTO_FLUSH, Boolean.class, false)) { this.defaultFlushModeName = FlushMode.AUTO.name(); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernateUtil.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernateUtil.java index 691c7cd915..ef13486c3c 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernateUtil.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernateUtil.java @@ -37,6 +37,7 @@ import org.hibernate.SessionFactory; import org.hibernate.engine.spi.EntityEntry; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.spi.Status; +import org.grails.orm.hibernate.query.HibernateQueryArgument; import org.hibernate.internal.util.StringHelper; import org.hibernate.proxy.HibernateProxy; import org.slf4j.Logger; @@ -52,20 +53,48 @@ import org.springframework.transaction.support.TransactionSynchronizationManager public class GrailsHibernateUtil extends HibernateRuntimeUtils { protected static final Logger LOG = LoggerFactory.getLogger(GrailsHibernateUtil.class); - public static final String ARGUMENT_FETCH_SIZE = "fetchSize"; - public static final String ARGUMENT_TIMEOUT = "timeout"; - public static final String ARGUMENT_READ_ONLY = "readOnly"; - public static final String ARGUMENT_FLUSH_MODE = "flushMode"; - public static final String ARGUMENT_MAX = "max"; - public static final String ARGUMENT_OFFSET = "offset"; - public static final String ARGUMENT_ORDER = "order"; - public static final String ARGUMENT_SORT = "sort"; - public static final String ORDER_DESC = "desc"; - public static final String ORDER_ASC = "asc"; - public static final String ARGUMENT_FETCH = "fetch"; - public static final String ARGUMENT_IGNORE_CASE = "ignoreCase"; - public static final String ARGUMENT_CACHE = "cache"; - public static final String ARGUMENT_LOCK = "lock"; + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#FETCH_SIZE} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_FETCH_SIZE = HibernateQueryArgument.FETCH_SIZE.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#TIMEOUT} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_TIMEOUT = HibernateQueryArgument.TIMEOUT.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#READ_ONLY} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_READ_ONLY = HibernateQueryArgument.READ_ONLY.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#FLUSH_MODE} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_FLUSH_MODE = HibernateQueryArgument.FLUSH_MODE.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#MAX} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_MAX = HibernateQueryArgument.MAX.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#OFFSET} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_OFFSET = HibernateQueryArgument.OFFSET.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#ORDER} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_ORDER = HibernateQueryArgument.ORDER.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#SORT} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_SORT = HibernateQueryArgument.SORT.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#ORDER_DESC} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ORDER_DESC = HibernateQueryArgument.ORDER_DESC.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#ORDER_ASC} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ORDER_ASC = HibernateQueryArgument.ORDER_ASC.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#FETCH} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_FETCH = HibernateQueryArgument.FETCH.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#IGNORE_CASE} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_IGNORE_CASE = HibernateQueryArgument.IGNORE_CASE.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#CACHE} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_CACHE = HibernateQueryArgument.CACHE.value(); + /** @deprecated Use {@link org.grails.orm.hibernate.query.HibernateQueryArgument#LOCK} */ + @Deprecated(since = "8.0", forRemoval = true) + public static final String ARGUMENT_LOCK = HibernateQueryArgument.LOCK.value(); public static final Class<?>[] EMPTY_CLASS_ARRAY = {}; private static HibernateProxyHandler proxyHandler = new HibernateProxyHandler(); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/GrailsHibernateQueryUtils.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/GrailsHibernateQueryUtils.java index cc73b32ca9..0cc2f785e8 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/GrailsHibernateQueryUtils.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/GrailsHibernateQueryUtils.java @@ -25,7 +25,6 @@ import java.util.Comparator; import java.util.Map; import java.util.Objects; import java.util.Optional; -import org.grails.datastore.gorm.finders.DynamicFinder; import org.grails.datastore.mapping.config.Property; import org.grails.datastore.mapping.model.PersistentEntity; import org.grails.datastore.mapping.model.PersistentProperty; @@ -67,7 +66,7 @@ public class GrailsHibernateQueryUtils { Map argMap, ConversionService conversionService, boolean useDefaultMapping) { - Object fetchObj = argMap.get(DynamicFinder.ARGUMENT_FETCH); + Object fetchObj = argMap.get(HibernateQueryArgument.FETCH.value()); if (fetchObj instanceof Map) { Map fetch = (Map) fetchObj; for (Object o : fetch.keySet()) { @@ -80,27 +79,27 @@ public class GrailsHibernateQueryUtils { } } - final Object sortObj = argMap.get(DynamicFinder.ARGUMENT_SORT); + final Object sortObj = argMap.get(HibernateQueryArgument.SORT.value()); if (sortObj != null) { final boolean ignoreCase = - !(argMap.get(DynamicFinder.ARGUMENT_IGNORE_CASE) instanceof Boolean b) || b; + !(argMap.get(HibernateQueryArgument.IGNORE_CASE.value()) instanceof Boolean b) || b; if (sortObj instanceof Map) { Map sortMap = (Map) sortObj; for (Object sort : sortMap.keySet()) { final String order = - DynamicFinder.ORDER_DESC.equalsIgnoreCase((String) sortMap.get(sort)) - ? DynamicFinder.ORDER_DESC - : DynamicFinder.ORDER_ASC; + HibernateQueryArgument.ORDER_DESC.value().equalsIgnoreCase((String) sortMap.get(sort)) + ? HibernateQueryArgument.ORDER_DESC.value() + : HibernateQueryArgument.ORDER_ASC.value(); addOrderPossiblyNested( query, queryRoot, criteriaBuilder, entity, (String) sort, order, ignoreCase); } } else { final String sort = (String) sortObj; final String order = - DynamicFinder.ORDER_DESC.equalsIgnoreCase( - (String) argMap.get(DynamicFinder.ARGUMENT_ORDER)) - ? DynamicFinder.ORDER_DESC - : DynamicFinder.ORDER_ASC; + HibernateQueryArgument.ORDER_DESC.value().equalsIgnoreCase( + (String) argMap.get(HibernateQueryArgument.ORDER.value())) + ? HibernateQueryArgument.ORDER_DESC.value() + : HibernateQueryArgument.ORDER_ASC.value(); addOrderPossiblyNested(query, queryRoot, criteriaBuilder, entity, sort, order, ignoreCase); } } else if (useDefaultMapping) { @@ -110,9 +109,9 @@ public class GrailsHibernateQueryUtils { Map sortMap = m.getSort().getNamesAndDirections(); for (Object sort : sortMap.keySet()) { final String order = - DynamicFinder.ORDER_DESC.equalsIgnoreCase((String) sortMap.get(sort)) - ? DynamicFinder.ORDER_DESC - : DynamicFinder.ORDER_ASC; + HibernateQueryArgument.ORDER_DESC.value().equalsIgnoreCase((String) sortMap.get(sort)) + ? HibernateQueryArgument.ORDER_DESC.value() + : HibernateQueryArgument.ORDER_ASC.value(); addOrderPossiblyNested( query, queryRoot, criteriaBuilder, entity, (String) sort, order, true); } @@ -135,26 +134,26 @@ public class GrailsHibernateQueryUtils { ConversionService conversionService, boolean useDefaultMapping) { final Integer maxParam = - argMap.containsKey(DynamicFinder.ARGUMENT_MAX) - ? conversionService.convert(argMap.get(DynamicFinder.ARGUMENT_MAX), Integer.class) + argMap.containsKey(HibernateQueryArgument.MAX.value()) + ? conversionService.convert(argMap.get(HibernateQueryArgument.MAX.value()), Integer.class) : null; final Integer offsetParam = - argMap.containsKey(DynamicFinder.ARGUMENT_OFFSET) - ? conversionService.convert(argMap.get(DynamicFinder.ARGUMENT_OFFSET), Integer.class) + argMap.containsKey(HibernateQueryArgument.OFFSET.value()) + ? conversionService.convert(argMap.get(HibernateQueryArgument.OFFSET.value()), Integer.class) : null; - if (argMap.containsKey(DynamicFinder.ARGUMENT_FETCH_SIZE)) { + if (argMap.containsKey(HibernateQueryArgument.FETCH_SIZE.value())) { query.setFetchSize( - conversionService.convert(argMap.get(DynamicFinder.ARGUMENT_FETCH_SIZE), Integer.class)); + conversionService.convert(argMap.get(HibernateQueryArgument.FETCH_SIZE.value()), Integer.class)); } - if (argMap.containsKey(DynamicFinder.ARGUMENT_TIMEOUT)) { + if (argMap.containsKey(HibernateQueryArgument.TIMEOUT.value())) { query.setTimeout( - conversionService.convert(argMap.get(DynamicFinder.ARGUMENT_TIMEOUT), Integer.class)); + conversionService.convert(argMap.get(HibernateQueryArgument.TIMEOUT.value()), Integer.class)); } - if (argMap.containsKey(DynamicFinder.ARGUMENT_FLUSH_MODE)) { - query.setQueryFlushMode(convertQueryFlushMode(argMap.get(DynamicFinder.ARGUMENT_FLUSH_MODE))); + if (argMap.containsKey(HibernateQueryArgument.FLUSH_MODE.value())) { + query.setQueryFlushMode(convertQueryFlushMode(argMap.get(HibernateQueryArgument.FLUSH_MODE.value()))); } - if (argMap.containsKey(DynamicFinder.ARGUMENT_READ_ONLY)) { - query.setReadOnly(ClassUtils.getBooleanFromMap(DynamicFinder.ARGUMENT_READ_ONLY, argMap)); + if (argMap.containsKey(HibernateQueryArgument.READ_ONLY.value())) { + query.setReadOnly(ClassUtils.getBooleanFromMap(HibernateQueryArgument.READ_ONLY.value(), argMap)); } final int max = maxParam == null ? -1 : maxParam; @@ -165,12 +164,12 @@ public class GrailsHibernateQueryUtils { if (offset > -1) { query.setFirstResult(offset); } - if (ClassUtils.getBooleanFromMap(DynamicFinder.ARGUMENT_LOCK, argMap)) { + if (ClassUtils.getBooleanFromMap(HibernateQueryArgument.LOCK.value(), argMap)) { query.setLockMode(LockModeType.PESSIMISTIC_WRITE); query.setCacheable(false); } else { - if (argMap.containsKey(DynamicFinder.ARGUMENT_CACHE)) { - query.setCacheable(ClassUtils.getBooleanFromMap(DynamicFinder.ARGUMENT_CACHE, argMap)); + if (argMap.containsKey(HibernateQueryArgument.CACHE.value())) { + query.setCacheable(ClassUtils.getBooleanFromMap(HibernateQueryArgument.CACHE.value(), argMap)); } else { cacheCriteriaByMapping(entity.getJavaClass(), query); } @@ -281,7 +280,7 @@ public class GrailsHibernateQueryUtils { ignoreCase ? criteriaBuilder.upper(queryRoot.get(name)) : queryRoot.get(name)) .map( path -> - DynamicFinder.ORDER_DESC.equals(order) + HibernateQueryArgument.ORDER_DESC.value().equals(order) ? criteriaBuilder.desc(path) : criteriaBuilder.asc(path)) .sorted(orderComparator) @@ -295,7 +294,7 @@ public class GrailsHibernateQueryUtils { if (ignoreCase) { path = criteriaBuilder.upper(path); } - if (DynamicFinder.ORDER_DESC.equals(order)) { + if (HibernateQueryArgument.ORDER_DESC.value().equals(order)) { query.orderBy(criteriaBuilder.desc(path)); } else { query.orderBy(criteriaBuilder.asc(path)); @@ -306,7 +305,7 @@ public class GrailsHibernateQueryUtils { if (ignoreCase) { path = criteriaBuilder.upper(path); } - if (DynamicFinder.ORDER_DESC.equals(order)) { + if (HibernateQueryArgument.ORDER_DESC.value().equals(order)) { query.orderBy(criteriaBuilder.desc(path)); } else { query.orderBy(criteriaBuilder.asc(path)); diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateHqlQuery.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateHqlQuery.java index 02e21230fc..d658935b36 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateHqlQuery.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateHqlQuery.java @@ -27,7 +27,6 @@ import java.util.Map; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.groovy.parser.antlr4.util.StringUtils; -import org.grails.datastore.gorm.finders.DynamicFinder; import org.grails.datastore.mapping.core.Datastore; import org.grails.datastore.mapping.core.Session; import org.grails.datastore.mapping.model.PersistentEntity; @@ -161,15 +160,15 @@ public class HibernateHqlQuery extends Query { } public void populateQuerySettings(Map<?, ?> args) { - ifPresent(args, DynamicFinder.ARGUMENT_MAX, v -> delegate.setMaxResults(toInt(v))); - ifPresent(args, DynamicFinder.ARGUMENT_OFFSET, v -> delegate.setFirstResult(toInt(v))); - ifPresent(args, DynamicFinder.ARGUMENT_CACHE, v -> delegate.setCacheable(toBool(v))); - ifPresent(args, DynamicFinder.ARGUMENT_FETCH_SIZE, v -> delegate.setFetchSize(toInt(v))); - ifPresent(args, DynamicFinder.ARGUMENT_TIMEOUT, v -> delegate.setTimeout(toInt(v))); - ifPresent(args, DynamicFinder.ARGUMENT_READ_ONLY, v -> delegate.setReadOnly(toBool(v))); + ifPresent(args, HibernateQueryArgument.MAX.value(), v -> delegate.setMaxResults(toInt(v))); + ifPresent(args, HibernateQueryArgument.OFFSET.value(), v -> delegate.setFirstResult(toInt(v))); + ifPresent(args, HibernateQueryArgument.CACHE.value(), v -> delegate.setCacheable(toBool(v))); + ifPresent(args, HibernateQueryArgument.FETCH_SIZE.value(), v -> delegate.setFetchSize(toInt(v))); + ifPresent(args, HibernateQueryArgument.TIMEOUT.value(), v -> delegate.setTimeout(toInt(v))); + ifPresent(args, HibernateQueryArgument.READ_ONLY.value(), v -> delegate.setReadOnly(toBool(v))); ifPresent( args, - DynamicFinder.ARGUMENT_FLUSH_MODE, + HibernateQueryArgument.FLUSH_MODE.value(), v -> delegate.setQueryFlushMode(GrailsHibernateQueryUtils.convertQueryFlushMode(v))); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQueryArgument.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQueryArgument.java new file mode 100644 index 0000000000..191899bea8 --- /dev/null +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQueryArgument.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.grails.orm.hibernate.query; + +import org.grails.datastore.gorm.finders.DynamicFinder; + +/** + * Typed enum of all query argument keys and Hibernate config property keys used in the + * Hibernate 7 datastore. String values are sourced from {@link DynamicFinder} for the + * query arguments, eliminating the three duplicate sets of raw string constants that + * previously existed across {@code HibernateQueryConstants}, {@code GrailsHibernateUtil}, + * and {@code DynamicFinder}. + * + * <p>Use {@link #value()} to obtain the string key for map lookups. {@link #toString()} + * also returns the string value so instances can be used in string-interpolated contexts. + * + * @since 8.0 + */ +public enum HibernateQueryArgument { + + // ── pagination & execution ──────────────────────────────────────────────── + MAX(DynamicFinder.ARGUMENT_MAX), + OFFSET(DynamicFinder.ARGUMENT_OFFSET), + FETCH_SIZE(DynamicFinder.ARGUMENT_FETCH_SIZE), + TIMEOUT(DynamicFinder.ARGUMENT_TIMEOUT), + FLUSH_MODE(DynamicFinder.ARGUMENT_FLUSH_MODE), + READ_ONLY(DynamicFinder.ARGUMENT_READ_ONLY), + CACHE(DynamicFinder.ARGUMENT_CACHE), + LOCK(DynamicFinder.ARGUMENT_LOCK), + FETCH(DynamicFinder.ARGUMENT_FETCH), + + // ── sorting ─────────────────────────────────────────────────────────────── + SORT(DynamicFinder.ARGUMENT_SORT), + ORDER(DynamicFinder.ARGUMENT_ORDER), + IGNORE_CASE(DynamicFinder.ARGUMENT_IGNORE_CASE), + ORDER_DESC(DynamicFinder.ORDER_DESC), + ORDER_ASC(DynamicFinder.ORDER_ASC), + + // ── Hibernate config properties ─────────────────────────────────────────── + CONFIG_CACHE_QUERIES("grails.hibernate.cache.queries"), + CONFIG_OSIV_READONLY("grails.hibernate.osiv.readonly"), + CONFIG_PASS_READONLY("grails.hibernate.pass.readonly"); + + private final String value; + + HibernateQueryArgument(String value) { + this.value = value; + } + + /** Returns the string key used for map lookups and config property resolution. */ + public String value() { + return value; + } + + @Override + public String toString() { + return value; + } +} diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQueryConstants.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQueryConstants.java index 6d245d43ff..84aa26ff99 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQueryConstants.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQueryConstants.java @@ -19,28 +19,27 @@ package org.grails.orm.hibernate.query; /** - * Constants used for query arguments etc. - * - * @since 3.0.7 - * @author Graeme Rocher + * @deprecated Use {@link HibernateQueryArgument} instead. */ +@Deprecated(since = "8.0", forRemoval = true) public interface HibernateQueryConstants { - String ARGUMENT_FETCH_SIZE = "fetchSize"; - String ARGUMENT_TIMEOUT = "timeout"; - String ARGUMENT_READ_ONLY = "readOnly"; - String ARGUMENT_FLUSH_MODE = "flushMode"; - String ARGUMENT_MAX = "max"; - String ARGUMENT_OFFSET = "offset"; - String ARGUMENT_ORDER = "order"; - String ARGUMENT_SORT = "sort"; - String ORDER_DESC = "desc"; - String ORDER_ASC = "asc"; - String ARGUMENT_FETCH = "fetch"; - String ARGUMENT_IGNORE_CASE = "ignoreCase"; - String ARGUMENT_CACHE = "cache"; - String ARGUMENT_LOCK = "lock"; - String CONFIG_PROPERTY_CACHE_QUERIES = "grails.hibernate.cache.queries"; - String CONFIG_PROPERTY_OSIV_READONLY = "grails.hibernate.osiv.readonly"; - String CONFIG_PROPERTY_PASS_READONLY_TO_HIBERNATE = "grails.hibernate.pass.readonly"; + String ARGUMENT_FETCH_SIZE = HibernateQueryArgument.FETCH_SIZE.value(); + String ARGUMENT_TIMEOUT = HibernateQueryArgument.TIMEOUT.value(); + String ARGUMENT_READ_ONLY = HibernateQueryArgument.READ_ONLY.value(); + String ARGUMENT_FLUSH_MODE = HibernateQueryArgument.FLUSH_MODE.value(); + String ARGUMENT_MAX = HibernateQueryArgument.MAX.value(); + String ARGUMENT_OFFSET = HibernateQueryArgument.OFFSET.value(); + String ARGUMENT_ORDER = HibernateQueryArgument.ORDER.value(); + String ARGUMENT_SORT = HibernateQueryArgument.SORT.value(); + String ORDER_DESC = HibernateQueryArgument.ORDER_DESC.value(); + String ORDER_ASC = HibernateQueryArgument.ORDER_ASC.value(); + String ARGUMENT_FETCH = HibernateQueryArgument.FETCH.value(); + String ARGUMENT_IGNORE_CASE = HibernateQueryArgument.IGNORE_CASE.value(); + String ARGUMENT_CACHE = HibernateQueryArgument.CACHE.value(); + String ARGUMENT_LOCK = HibernateQueryArgument.LOCK.value(); + String CONFIG_PROPERTY_CACHE_QUERIES = HibernateQueryArgument.CONFIG_CACHE_QUERIES.value(); + String CONFIG_PROPERTY_OSIV_READONLY = HibernateQueryArgument.CONFIG_OSIV_READONLY.value(); + String CONFIG_PROPERTY_PASS_READONLY_TO_HIBERNATE = HibernateQueryArgument.CONFIG_PASS_READONLY.value(); } +
