113
113
import org .springframework .data .elasticsearch .core .mapping .ElasticsearchPersistentProperty ;
114
114
import org .springframework .data .elasticsearch .core .mapping .IndexCoordinates ;
115
115
import org .springframework .data .elasticsearch .core .query .*;
116
+ import org .springframework .data .mapping .context .MappingContext ;
116
117
import org .springframework .lang .Nullable ;
117
118
import org .springframework .util .Assert ;
118
119
import org .springframework .util .StringUtils ;
@@ -891,15 +892,17 @@ public IndexRequest indexRequest(IndexQuery query, IndexCoordinates index) {
891
892
String indexName = index .getIndexName ();
892
893
IndexRequest indexRequest ;
893
894
894
- if (query .getObject () != null ) {
895
- String id = StringUtils .isEmpty (query .getId ()) ? getPersistentEntityId (query .getObject ()) : query .getId ();
895
+ Object queryObject = query .getObject ();
896
+
897
+ if (queryObject != null ) {
898
+ String id = StringUtils .isEmpty (query .getId ()) ? getPersistentEntityId (queryObject ) : query .getId ();
896
899
// If we have a query id and a document id, do not ask ES to generate one.
897
900
if (id != null ) {
898
901
indexRequest = new IndexRequest (indexName ).id (id );
899
902
} else {
900
903
indexRequest = new IndexRequest (indexName );
901
904
}
902
- indexRequest .source (elasticsearchConverter .mapObject (query . getObject () ).toJson (), Requests .INDEX_CONTENT_TYPE );
905
+ indexRequest .source (elasticsearchConverter .mapObject (queryObject ).toJson (), Requests .INDEX_CONTENT_TYPE );
903
906
} else if (query .getSource () != null ) {
904
907
indexRequest = new IndexRequest (indexName ).id (query .getId ()).source (query .getSource (),
905
908
Requests .INDEX_CONTENT_TYPE );
@@ -910,7 +913,8 @@ public IndexRequest indexRequest(IndexQuery query, IndexCoordinates index) {
910
913
911
914
if (query .getVersion () != null ) {
912
915
indexRequest .version (query .getVersion ());
913
- VersionType versionType = retrieveVersionTypeFromPersistentEntity (query .getObject ().getClass ());
916
+ VersionType versionType = retrieveVersionTypeFromPersistentEntity (
917
+ queryObject != null ? queryObject .getClass () : null );
914
918
indexRequest .versionType (versionType );
915
919
}
916
920
@@ -935,15 +939,16 @@ public IndexRequestBuilder indexRequestBuilder(Client client, IndexQuery query,
935
939
936
940
IndexRequestBuilder indexRequestBuilder ;
937
941
938
- if (query .getObject () != null ) {
939
- String id = StringUtils .isEmpty (query .getId ()) ? getPersistentEntityId (query .getObject ()) : query .getId ();
942
+ Object queryObject = query .getObject ();
943
+ if (queryObject != null ) {
944
+ String id = StringUtils .isEmpty (query .getId ()) ? getPersistentEntityId (queryObject ) : query .getId ();
940
945
// If we have a query id and a document id, do not ask ES to generate one.
941
946
if (id != null ) {
942
947
indexRequestBuilder = client .prepareIndex (indexName , type , id );
943
948
} else {
944
949
indexRequestBuilder = client .prepareIndex (indexName , type );
945
950
}
946
- indexRequestBuilder .setSource (elasticsearchConverter .mapObject (query . getObject () ).toJson (),
951
+ indexRequestBuilder .setSource (elasticsearchConverter .mapObject (queryObject ).toJson (),
947
952
Requests .INDEX_CONTENT_TYPE );
948
953
} else if (query .getSource () != null ) {
949
954
indexRequestBuilder = client .prepareIndex (indexName , type , query .getId ()).setSource (query .getSource (),
@@ -954,7 +959,8 @@ public IndexRequestBuilder indexRequestBuilder(Client client, IndexQuery query,
954
959
}
955
960
if (query .getVersion () != null ) {
956
961
indexRequestBuilder .setVersion (query .getVersion ());
957
- VersionType versionType = retrieveVersionTypeFromPersistentEntity (query .getObject ().getClass ());
962
+ VersionType versionType = retrieveVersionTypeFromPersistentEntity (
963
+ queryObject != null ? queryObject .getClass () : null );
958
964
indexRequestBuilder .setVersionType (versionType );
959
965
}
960
966
@@ -1577,10 +1583,19 @@ private String getPersistentEntityId(Object entity) {
1577
1583
return null ;
1578
1584
}
1579
1585
1580
- private VersionType retrieveVersionTypeFromPersistentEntity (Class <?> clazz ) {
1586
+ private VersionType retrieveVersionTypeFromPersistentEntity (@ Nullable Class <?> clazz ) {
1587
+
1588
+ MappingContext <? extends ElasticsearchPersistentEntity <?>, ElasticsearchPersistentProperty > mappingContext = elasticsearchConverter
1589
+ .getMappingContext ();
1590
+
1591
+ ElasticsearchPersistentEntity <?> persistentEntity = clazz != null ? mappingContext .getPersistentEntity (clazz )
1592
+ : null ;
1581
1593
1582
- VersionType versionType = elasticsearchConverter .getMappingContext ().getRequiredPersistentEntity (clazz )
1583
- .getVersionType ();
1594
+ VersionType versionType = null ;
1595
+
1596
+ if (persistentEntity != null ) {
1597
+ versionType = persistentEntity .getVersionType ();
1598
+ }
1584
1599
1585
1600
return versionType != null ? versionType : VersionType .EXTERNAL ;
1586
1601
}
@@ -1606,25 +1621,25 @@ private boolean hasSeqNoPrimaryTermProperty(@Nullable Class<?> entityClass) {
1606
1621
return entity .hasSeqNoPrimaryTermProperty ();
1607
1622
}
1608
1623
1609
- private FetchSourceContext getFetchSourceContext (Query searchQuery ) {
1610
- FetchSourceContext fetchSourceContext = null ;
1611
- SourceFilter sourceFilter = searchQuery .getSourceFilter ();
1612
-
1613
- if (!isEmpty (searchQuery .getFields ())) {
1614
- if (sourceFilter == null ) {
1615
- sourceFilter = new FetchSourceFilter (toArray (searchQuery .getFields ()), null );
1616
- } else {
1617
- ArrayList <String > arrayList = new ArrayList <>();
1618
- Collections .addAll (arrayList , sourceFilter .getIncludes ());
1619
- sourceFilter = new FetchSourceFilter (toArray (arrayList ), null );
1620
- }
1621
-
1622
- fetchSourceContext = new FetchSourceContext (true , sourceFilter .getIncludes (), sourceFilter .getExcludes ());
1623
- } else if (sourceFilter != null ) {
1624
- fetchSourceContext = new FetchSourceContext (true , sourceFilter .getIncludes (), sourceFilter .getExcludes ());
1625
- }
1626
- return fetchSourceContext ;
1627
- }
1624
+ private FetchSourceContext getFetchSourceContext (Query searchQuery ) {
1625
+ FetchSourceContext fetchSourceContext = null ;
1626
+ SourceFilter sourceFilter = searchQuery .getSourceFilter ();
1627
+
1628
+ if (!isEmpty (searchQuery .getFields ())) {
1629
+ if (sourceFilter == null ) {
1630
+ sourceFilter = new FetchSourceFilter (toArray (searchQuery .getFields ()), null );
1631
+ } else {
1632
+ ArrayList <String > arrayList = new ArrayList <>();
1633
+ Collections .addAll (arrayList , sourceFilter .getIncludes ());
1634
+ sourceFilter = new FetchSourceFilter (toArray (arrayList ), null );
1635
+ }
1636
+
1637
+ fetchSourceContext = new FetchSourceContext (true , sourceFilter .getIncludes (), sourceFilter .getExcludes ());
1638
+ } else if (sourceFilter != null ) {
1639
+ fetchSourceContext = new FetchSourceContext (true , sourceFilter .getIncludes (), sourceFilter .getExcludes ());
1640
+ }
1641
+ return fetchSourceContext ;
1642
+ }
1628
1643
1629
1644
// endregion
1630
1645
0 commit comments