diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmSelectionEntityLoader.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmSelectionEntityLoader.java index 6b715e9e536..87c2f7d5e86 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmSelectionEntityLoader.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmSelectionEntityLoader.java @@ -10,11 +10,11 @@ import org.hibernate.QueryTimeoutException; import org.hibernate.exception.LockTimeoutException; -import org.hibernate.jpa.QueryHints; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.query.Query; import org.hibernate.search.engine.common.timing.Deadline; import org.hibernate.search.mapper.orm.common.impl.HibernateOrmUtils; +import org.hibernate.search.mapper.orm.search.query.spi.HibernateOrmSearchQueryHints; import org.hibernate.search.mapper.pojo.loading.spi.PojoSelectionEntityLoader; abstract class AbstractHibernateOrmSelectionEntityLoader implements PojoSelectionEntityLoader { @@ -59,7 +59,7 @@ final Query createQuery(int fetchSize, Long timeout) { query.setFetchSize( fetchSize ); if ( timeout != null ) { - query.setHint( QueryHints.SPEC_HINT_TIMEOUT, Math.toIntExact( timeout ) ); + query.setHint( HibernateOrmSearchQueryHints.JAVAX_TIMEOUT, Math.toIntExact( timeout ) ); } EntityGraphHint entityGraphHint = loadingOptions.entityGraphHintOrNullForType( entityPersister ); diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/search/query/impl/HibernateOrmSearchQueryAdapter.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/search/query/impl/HibernateOrmSearchQueryAdapter.java index 6fcb38dca7d..fa528fb1b35 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/search/query/impl/HibernateOrmSearchQueryAdapter.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/search/query/impl/HibernateOrmSearchQueryAdapter.java @@ -171,16 +171,19 @@ public String getQueryString() { @Override public HibernateOrmSearchQueryAdapter setHint(String hintName, Object value) { switch ( hintName ) { - case HibernateOrmSearchQueryHints.TIMEOUT_JPA: + case HibernateOrmSearchQueryHints.JAVAX_TIMEOUT: + case HibernateOrmSearchQueryHints.JAKARTA_TIMEOUT: delegate.failAfter( hintValueToLong( value ), TimeUnit.MILLISECONDS ); break; - case HibernateOrmSearchQueryHints.TIMEOUT_HIBERNATE: + case HibernateOrmSearchQueryHints.HIBERNATE_TIMEOUT: setTimeout( hintValueToInteger( value ) ); break; - case HibernateOrmSearchQueryHints.FETCHGRAPH: + case HibernateOrmSearchQueryHints.JAVAX_FETCHGRAPH: + case HibernateOrmSearchQueryHints.JAKARTA_FETCHGRAPH: applyGraph( hintValueToEntityGraph( value ), GraphSemantic.FETCH ); break; - case HibernateOrmSearchQueryHints.LOADGRAPH: + case HibernateOrmSearchQueryHints.JAVAX_LOADGRAPH: + case HibernateOrmSearchQueryHints.JAKARTA_LOADGRAPH: applyGraph( hintValueToEntityGraph( value ), GraphSemantic.LOAD ); break; default: diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/search/query/spi/HibernateOrmSearchQueryHints.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/search/query/spi/HibernateOrmSearchQueryHints.java index 4d58705b88f..d774d858176 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/search/query/spi/HibernateOrmSearchQueryHints.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/search/query/spi/HibernateOrmSearchQueryHints.java @@ -10,17 +10,25 @@ * Constants for query hints accepted by Hibernate Search. *

* We redefine the constants here instead of using those exposed by Hibernate ORM, - * because the constants from Hibernate ORM are not transformed currently - * in some versions of the Jakarta artifacts (they start with "javax.persistence." instead of "jakarta.persistence."). - * By defining the constants directly in our project, we can transform the constants correctly - * in our own Jakarta artifacts. + * because the constants from Hibernate ORM are not compile-time constants: + * some of them are initialized during static class initialization, + * which prevents their use in switch constructs, in particular. */ public final class HibernateOrmSearchQueryHints { private HibernateOrmSearchQueryHints() { } - public static final String TIMEOUT_JPA = "javax.persistence.query.timeout"; - public static final String TIMEOUT_HIBERNATE = "org.hibernate.timeout"; - public static final String FETCHGRAPH = "javax.persistence.fetchgraph"; - public static final String LOADGRAPH = "javax.persistence.loadgraph"; + // Don't remove the string concatenations: + // they're hacks to avoid automated replacements when building some artifacts. + private static final String JAVAX_PREFIX = "javax" + ".persistence."; + private static final String JAKARTA_PREFIX = "jakarta" + ".persistence."; + private static final String HIBERNATE_PREFIX = "org.hibernate."; + + public static final String JAVAX_TIMEOUT = JAVAX_PREFIX + "query.timeout"; + public static final String JAKARTA_TIMEOUT = JAKARTA_PREFIX + "query.timeout"; + public static final String HIBERNATE_TIMEOUT = HIBERNATE_PREFIX + "timeout"; + public static final String JAVAX_FETCHGRAPH = JAVAX_PREFIX + "fetchgraph"; + public static final String JAKARTA_FETCHGRAPH = JAKARTA_PREFIX + "fetchgraph"; + public static final String JAVAX_LOADGRAPH = JAVAX_PREFIX + "loadgraph"; + public static final String JAKARTA_LOADGRAPH = JAKARTA_PREFIX + "loadgraph"; } diff --git a/orm6/mapper/orm/ant-src-changes.patch b/orm6/mapper/orm/ant-src-changes.patch index ddb548d1706..ab2a4ae6b1b 100644 --- a/orm6/mapper/orm/ant-src-changes.patch +++ b/orm6/mapper/orm/ant-src-changes.patch @@ -448,7 +448,7 @@ index 355980c45a..30e334a6a0 100644 || isWholePath && isAssociation( containedValueClass ) ) { pathsAsStrings.add( propertyNode.toPropertyString() ); diff --git a/main/java/org/hibernate/search/mapper/orm/search/query/impl/HibernateOrmSearchQueryAdapter.java b/main/java/org/hibernate/search/mapper/orm/search/query/impl/HibernateOrmSearchQueryAdapter.java -index 16dc46a2f9..f5ddb7584e 100644 +index c8ca89a1e0..7203e7d6e8 100644 --- a/main/java/org/hibernate/search/mapper/orm/search/query/impl/HibernateOrmSearchQueryAdapter.java +++ b/main/java/org/hibernate/search/mapper/orm/search/query/impl/HibernateOrmSearchQueryAdapter.java @@ -7,52 +7,48 @@ @@ -644,13 +644,14 @@ index 16dc46a2f9..f5ddb7584e 100644 @Override public HibernateOrmSearchQueryAdapter setHint(String hintName, Object value) { switch ( hintName ) { -@@ -178,13 +123,11 @@ public HibernateOrmSearchQueryAdapter setHint(String hintName, Object value) - setTimeout( hintValueToInteger( value ) ); +@@ -180,14 +125,12 @@ public HibernateOrmSearchQueryAdapter setHint(String hintName, Object value) break; - case HibernateOrmSearchQueryHints.FETCHGRAPH: + case HibernateOrmSearchQueryHints.JAVAX_FETCHGRAPH: + case HibernateOrmSearchQueryHints.JAKARTA_FETCHGRAPH: - applyGraph( hintValueToEntityGraph( value ), GraphSemantic.FETCH ); - break; - case HibernateOrmSearchQueryHints.LOADGRAPH: + case HibernateOrmSearchQueryHints.JAVAX_LOADGRAPH: + case HibernateOrmSearchQueryHints.JAKARTA_LOADGRAPH: - applyGraph( hintValueToEntityGraph( value ), GraphSemantic.LOAD ); + applyEntityGraphQueryHint( hintName, hintValueToEntityGraph( value ) ); break; @@ -660,7 +661,7 @@ index 16dc46a2f9..f5ddb7584e 100644 break; } return this; -@@ -204,141 +147,98 @@ public HibernateOrmSearchQueryAdapter applyGraph(RootGraph graph, GraphSemant +@@ -207,141 +150,98 @@ public HibernateOrmSearchQueryAdapter applyGraph(RootGraph graph, GraphSemant } @Override @@ -849,7 +850,7 @@ index 16dc46a2f9..f5ddb7584e 100644 throw parametersNoSupported(); } -@@ -347,18 +247,16 @@ private UnsupportedOperationException parametersNoSupported() { +@@ -350,18 +250,16 @@ private UnsupportedOperationException parametersNoSupported() { } @Override @@ -873,7 +874,7 @@ index 16dc46a2f9..f5ddb7584e 100644 return new UnsupportedOperationException( "Result transformers are not supported in Hibernate Search queries" ); } -@@ -388,7 +286,12 @@ private UnsupportedOperationException lockOptionsNotSupported() { +@@ -391,7 +289,12 @@ private UnsupportedOperationException lockOptionsNotSupported() { } @Override @@ -887,7 +888,7 @@ index 16dc46a2f9..f5ddb7584e 100644 throw new UnsupportedOperationException( "executeUpdate is not supported in Hibernate Search queries" ); } -@@ -397,30 +300,6 @@ public HibernateOrmSearchQueryAdapter setLockMode(String alias, LockMode lock +@@ -400,30 +303,6 @@ public HibernateOrmSearchQueryAdapter setLockMode(String alias, LockMode lock throw lockOptionsNotSupported(); } @@ -918,7 +919,7 @@ index 16dc46a2f9..f5ddb7584e 100644 private static long hintValueToLong(Object value) { if ( value instanceof Number ) { return ( (Number) value ).longValue(); -@@ -439,8 +318,8 @@ private static int hintValueToInteger(Object value) { +@@ -442,8 +321,8 @@ private static int hintValueToInteger(Object value) { } } diff --git a/orm6/v5migrationhelper/orm/ant-src-changes.patch b/orm6/v5migrationhelper/orm/ant-src-changes.patch index b454894a23a..0ac8e85a5fe 100644 --- a/orm6/v5migrationhelper/orm/ant-src-changes.patch +++ b/orm6/v5migrationhelper/orm/ant-src-changes.patch @@ -1,5 +1,5 @@ diff --git a/main/java/org/hibernate/search/query/hibernate/impl/FullTextQueryImpl.java b/main/java/org/hibernate/search/query/hibernate/impl/FullTextQueryImpl.java -index b767d5a847..a846f79cee 100644 +index c6481cc62e..8e34239ef1 100644 --- a/main/java/org/hibernate/search/query/hibernate/impl/FullTextQueryImpl.java +++ b/main/java/org/hibernate/search/query/hibernate/impl/FullTextQueryImpl.java @@ -7,21 +7,17 @@ @@ -237,13 +237,14 @@ index b767d5a847..a846f79cee 100644 @Override @SuppressWarnings("deprecation") public FullTextQuery setHint(String hintName, Object value) { -@@ -264,116 +246,55 @@ public FullTextQuery setHint(String hintName, Object value) { - setTimeout( hintValueToInteger( value ) ); +@@ -266,117 +248,56 @@ public FullTextQuery setHint(String hintName, Object value) { break; - case HibernateOrmSearchQueryHints.FETCHGRAPH: + case HibernateOrmSearchQueryHints.JAVAX_FETCHGRAPH: + case HibernateOrmSearchQueryHints.JAKARTA_FETCHGRAPH: - applyGraph( hintValueToEntityGraph( value ), GraphSemantic.FETCH ); - break; - case HibernateOrmSearchQueryHints.LOADGRAPH: + case HibernateOrmSearchQueryHints.JAVAX_LOADGRAPH: + case HibernateOrmSearchQueryHints.JAKARTA_LOADGRAPH: - applyGraph( hintValueToEntityGraph( value ), GraphSemantic.LOAD ); + applyEntityGraphQueryHint( hintName, hintValueToEntityGraph( value ) ); break; @@ -374,7 +375,7 @@ index b767d5a847..a846f79cee 100644 throw parametersNoSupported(); } -@@ -388,12 +309,7 @@ public FullTextQueryImpl setFlushMode(FlushModeType flushModeType) { +@@ -391,12 +312,7 @@ public FullTextQueryImpl setFlushMode(FlushModeType flushModeType) { @Override public FullTextQueryImpl setFetchSize(int fetchSize) { @@ -388,7 +389,7 @@ index b767d5a847..a846f79cee 100644 } @Override -@@ -431,7 +347,12 @@ public Object unwrap(Class type) { +@@ -434,7 +350,12 @@ public Object unwrap(Class type) { if ( type == org.apache.lucene.search.Query.class ) { return hSearchQuery.getLuceneQuery(); } @@ -402,7 +403,7 @@ index b767d5a847..a846f79cee 100644 } @Override -@@ -454,7 +375,12 @@ private UnsupportedOperationException lockOptionsNotSupported() { +@@ -457,7 +378,12 @@ private UnsupportedOperationException lockOptionsNotSupported() { } @Override @@ -416,7 +417,7 @@ index b767d5a847..a846f79cee 100644 throw new UnsupportedOperationException( "executeUpdate is not supported in Hibernate Search queries" ); } -@@ -512,32 +438,13 @@ public String getQueryString() { +@@ -515,32 +441,13 @@ public String getQueryString() { } @Override @@ -453,7 +454,7 @@ index b767d5a847..a846f79cee 100644 } @Override -@@ -546,12 +453,12 @@ public String toString() { +@@ -549,12 +456,12 @@ public String toString() { } private static final class Search5ScrollHitExtractor @@ -468,7 +469,7 @@ index b767d5a847..a846f79cee 100644 if ( hit instanceof Object[] ) { return (Object[]) hit; } -@@ -559,19 +466,6 @@ public Object[] toArray(Object hit) { +@@ -562,19 +469,6 @@ public Object[] toArray(Object hit) { return new Object[] { hit }; } } @@ -488,7 +489,7 @@ index b767d5a847..a846f79cee 100644 } private static int hintValueToInteger(Object value) { -@@ -583,7 +477,7 @@ private static int hintValueToInteger(Object value) { +@@ -586,7 +480,7 @@ private static int hintValueToInteger(Object value) { } } diff --git a/v5migrationhelper/orm/src/main/java/org/hibernate/search/query/hibernate/impl/FullTextQueryImpl.java b/v5migrationhelper/orm/src/main/java/org/hibernate/search/query/hibernate/impl/FullTextQueryImpl.java index 38cf064602c..3f654d6327f 100644 --- a/v5migrationhelper/orm/src/main/java/org/hibernate/search/query/hibernate/impl/FullTextQueryImpl.java +++ b/v5migrationhelper/orm/src/main/java/org/hibernate/search/query/hibernate/impl/FullTextQueryImpl.java @@ -257,16 +257,19 @@ public int getFirstResult() { public FullTextQuery setHint(String hintName, Object value) { hints.put( hintName, value ); switch ( hintName ) { - case HibernateOrmSearchQueryHints.TIMEOUT_JPA: + case HibernateOrmSearchQueryHints.JAVAX_TIMEOUT: + case HibernateOrmSearchQueryHints.JAKARTA_TIMEOUT: setTimeout( hintValueToInteger( value ), TimeUnit.MILLISECONDS ); break; - case HibernateOrmSearchQueryHints.TIMEOUT_HIBERNATE: + case HibernateOrmSearchQueryHints.HIBERNATE_TIMEOUT: setTimeout( hintValueToInteger( value ) ); break; - case HibernateOrmSearchQueryHints.FETCHGRAPH: + case HibernateOrmSearchQueryHints.JAVAX_FETCHGRAPH: + case HibernateOrmSearchQueryHints.JAKARTA_FETCHGRAPH: applyGraph( hintValueToEntityGraph( value ), GraphSemantic.FETCH ); break; - case HibernateOrmSearchQueryHints.LOADGRAPH: + case HibernateOrmSearchQueryHints.JAVAX_LOADGRAPH: + case HibernateOrmSearchQueryHints.JAKARTA_LOADGRAPH: applyGraph( hintValueToEntityGraph( value ), GraphSemantic.LOAD ); break; default: