From a091a769c2212f2e0d0ea2651ebaea81a5ad0159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Thu, 30 Mar 2017 15:10:11 +0200 Subject: [PATCH] HSEARCH-2662 Consistently report errors for any type of query when there is no indexed type This is one way of not having any index manager to query on, which could lead to errors similar to what we are trying to fix in HSEARCH-2662. On Lucene this case was correctly detected, but not on Elasticsearch. --- .../search/elasticsearch/impl/ElasticsearchHSQueryImpl.java | 6 +++++- .../hibernate/search/query/engine/impl/LuceneHSQuery.java | 4 +--- .../java/org/hibernate/search/util/logging/impl/Log.java | 3 +++ .../search/test/query/QueryUnindexedEntityTest.java | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchHSQueryImpl.java b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchHSQueryImpl.java index 55e3d1fd48b..288a37d6581 100644 --- a/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchHSQueryImpl.java +++ b/elasticsearch/src/main/java/org/hibernate/search/elasticsearch/impl/ElasticsearchHSQueryImpl.java @@ -337,7 +337,11 @@ private IndexSearcher getOrCreateSearcher() { private Iterable> getQueriedEntityTypes() { if ( indexedTargetedEntities == null || indexedTargetedEntities.isEmpty() ) { - return extendedIntegrator.getIndexBindings().keySet(); + Set> indexBindings = extendedIntegrator.getIndexBindings().keySet(); + if ( indexBindings.isEmpty() ) { + throw LOG.queryWithNoIndexedType(); + } + return indexBindings; } else { return indexedTargetedEntities; diff --git a/engine/src/main/java/org/hibernate/search/query/engine/impl/LuceneHSQuery.java b/engine/src/main/java/org/hibernate/search/query/engine/impl/LuceneHSQuery.java index d6c408c03c3..3d2d01a91a6 100644 --- a/engine/src/main/java/org/hibernate/search/query/engine/impl/LuceneHSQuery.java +++ b/engine/src/main/java/org/hibernate/search/query/engine/impl/LuceneHSQuery.java @@ -405,9 +405,7 @@ private LazyQueryState buildSearcher(ExtendedSearchIntegrator extendedIntegrator // empty indexedTargetedEntities array means search over all indexed entities, // but we have to make sure there is at least one if ( indexBindings.isEmpty() ) { - throw new SearchException( - "There are no mapped entities. Don't forget to add @Indexed to at least one class." - ); + throw log.queryWithNoIndexedType(); } for ( EntityIndexBinding entityIndexBinding : indexBindings.values() ) { diff --git a/engine/src/main/java/org/hibernate/search/util/logging/impl/Log.java b/engine/src/main/java/org/hibernate/search/util/logging/impl/Log.java index b3272a37844..cc2594333dd 100644 --- a/engine/src/main/java/org/hibernate/search/util/logging/impl/Log.java +++ b/engine/src/main/java/org/hibernate/search/util/logging/impl/Log.java @@ -1019,4 +1019,7 @@ public interface Log extends BasicLogger { @Message(id = 332, value = "None of the specified entity types ('%s') or any of their subclasses are configured." ) IllegalArgumentException targetedEntityTypesNotConfigured(String targetedEntities); + + @Message(id = 333, value = "Cannot query: there aren't any mapped entity. Don't forget to add @Indexed to at least one class." ) + SearchException queryWithNoIndexedType(); } diff --git a/orm/src/test/java/org/hibernate/search/test/query/QueryUnindexedEntityTest.java b/orm/src/test/java/org/hibernate/search/test/query/QueryUnindexedEntityTest.java index 56edaa8b9cb..87957db2167 100644 --- a/orm/src/test/java/org/hibernate/search/test/query/QueryUnindexedEntityTest.java +++ b/orm/src/test/java/org/hibernate/search/test/query/QueryUnindexedEntityTest.java @@ -49,7 +49,7 @@ public void testQueryOnAllEntities() throws Exception { fail(); } catch (SearchException e) { - assertTrue( "Wrong message", e.getMessage().startsWith( "There are no mapped entities" ) ); + assertTrue( "Wrong message", e.getMessage().contains( "Cannot query: there aren't any mapped entity" ) ); } tx.rollback();