@@ -98,31 +98,25 @@ public final class Neo4jTemplate implements Neo4jOperations, BeanFactoryAware {
98
98
99
99
private EventSupport eventSupport ;
100
100
101
- private final DatabaseSelectionProvider databaseSelectionProvider ;
102
-
103
101
public Neo4jTemplate (Neo4jClient neo4jClient ) {
104
- this (neo4jClient , new Neo4jMappingContext (), DatabaseSelectionProvider . getDefaultSelectionProvider () );
102
+ this (neo4jClient , new Neo4jMappingContext ());
105
103
}
106
104
107
- public Neo4jTemplate (Neo4jClient neo4jClient , Neo4jMappingContext neo4jMappingContext ,
108
- DatabaseSelectionProvider databaseSelectionProvider ) {
105
+ public Neo4jTemplate (Neo4jClient neo4jClient , Neo4jMappingContext neo4jMappingContext ) {
109
106
110
- this (neo4jClient , neo4jMappingContext , databaseSelectionProvider , EntityCallbacks .create ());
107
+ this (neo4jClient , neo4jMappingContext , EntityCallbacks .create ());
111
108
}
112
109
113
110
public Neo4jTemplate (Neo4jClient neo4jClient , Neo4jMappingContext neo4jMappingContext ,
114
- DatabaseSelectionProvider databaseSelectionProvider , EntityCallbacks entityCallbacks ) {
111
+ EntityCallbacks entityCallbacks ) {
115
112
116
113
Assert .notNull (neo4jClient , "The Neo4jClient is required" );
117
114
Assert .notNull (neo4jMappingContext , "The Neo4jMappingContext is required" );
118
- Assert .notNull (databaseSelectionProvider , "The database name provider is required" );
119
115
120
116
this .neo4jClient = neo4jClient ;
121
117
this .neo4jMappingContext = neo4jMappingContext ;
122
118
this .cypherGenerator = CypherGenerator .INSTANCE ;
123
119
this .eventSupport = EventSupport .useExistingCallbacks (neo4jMappingContext , entityCallbacks );
124
-
125
- this .databaseSelectionProvider = databaseSelectionProvider ;
126
120
}
127
121
128
122
@ Override
@@ -225,21 +219,20 @@ private Object convertIdValues(@Nullable Neo4jPersistentProperty idProperty, Obj
225
219
@ Override
226
220
public <T > T save (T instance ) {
227
221
228
- return saveImpl (instance , getDatabaseName () );
222
+ return saveImpl (instance );
229
223
}
230
224
231
- private <T > T saveImpl (T instance , @ Nullable String inDatabase ) {
225
+ private <T > T saveImpl (T instance ) {
232
226
233
227
Neo4jPersistentEntity <?> entityMetaData = neo4jMappingContext .getPersistentEntity (instance .getClass ());
234
228
boolean isEntityNew = entityMetaData .isNew (instance );
235
229
236
230
T entityToBeSaved = eventSupport .maybeCallBeforeBind (instance );
237
231
238
- DynamicLabels dynamicLabels = determineDynamicLabels (entityToBeSaved , entityMetaData , inDatabase );
232
+ DynamicLabels dynamicLabels = determineDynamicLabels (entityToBeSaved , entityMetaData );
239
233
240
234
Optional <Long > optionalInternalId = neo4jClient
241
235
.query (() -> renderer .render (cypherGenerator .prepareSaveOf (entityMetaData , dynamicLabels )))
242
- .in (inDatabase )
243
236
.bind (entityToBeSaved )
244
237
.with (neo4jMappingContext .getRequiredBinderFunctionFor ((Class <T >) entityToBeSaved .getClass ()))
245
238
.fetchAs (Long .class ).one ();
@@ -253,17 +246,16 @@ private <T> T saveImpl(T instance, @Nullable String inDatabase) {
253
246
propertyAccessor .setProperty (entityMetaData .getRequiredIdProperty (), optionalInternalId .get ());
254
247
entityToBeSaved = propertyAccessor .getBean ();
255
248
}
256
- return processRelations (entityMetaData , entityToBeSaved , isEntityNew , inDatabase );
249
+ return processRelations (entityMetaData , entityToBeSaved , isEntityNew );
257
250
}
258
251
259
- private <T > DynamicLabels determineDynamicLabels (T entityToBeSaved , Neo4jPersistentEntity <?> entityMetaData ,
260
- @ Nullable String inDatabase ) {
252
+ private <T > DynamicLabels determineDynamicLabels (T entityToBeSaved , Neo4jPersistentEntity <?> entityMetaData ) {
261
253
return entityMetaData .getDynamicLabelsProperty ().map (p -> {
262
254
263
255
PersistentPropertyAccessor propertyAccessor = entityMetaData .getPropertyAccessor (entityToBeSaved );
264
256
Neo4jClient .RunnableSpecTightToDatabase runnableQuery = neo4jClient
265
257
.query (() -> renderer .render (cypherGenerator .createStatementReturningDynamicLabels (entityMetaData )))
266
- .in ( inDatabase ). bind (propertyAccessor .getProperty (entityMetaData .getRequiredIdProperty ()))
258
+ .bind (propertyAccessor .getProperty (entityMetaData .getRequiredIdProperty ()))
267
259
.to (Constants .NAME_OF_ID ).bind (entityMetaData .getStaticLabels ())
268
260
.to (Constants .NAME_OF_STATIC_LABELS_PARAM );
269
261
@@ -282,8 +274,6 @@ private <T> DynamicLabels determineDynamicLabels(T entityToBeSaved, Neo4jPersist
282
274
@ Override
283
275
public <T > List <T > saveAll (Iterable <T > instances ) {
284
276
285
- String databaseName = getDatabaseName ();
286
-
287
277
Collection <T > entities ;
288
278
if (instances instanceof Collection ) {
289
279
entities = (Collection <T >) instances ;
@@ -302,7 +292,7 @@ public <T> List<T> saveAll(Iterable<T> instances) {
302
292
|| entityMetaData .getDynamicLabelsProperty ().isPresent ()) {
303
293
log .debug ("Saving entities using single statements." );
304
294
305
- return entities .stream ().map (e -> saveImpl (e , databaseName )).collect (Collectors .toList ());
295
+ return entities .stream ().map (e -> saveImpl (e )).collect (Collectors .toList ());
306
296
}
307
297
308
298
// we need to determine the `isNew` state of the entities before calling the id generator
@@ -319,12 +309,11 @@ public <T> List<T> saveAll(Iterable<T> instances) {
319
309
.collect (Collectors .toList ());
320
310
ResultSummary resultSummary = neo4jClient
321
311
.query (() -> renderer .render (cypherGenerator .prepareSaveOfMultipleInstancesOf (entityMetaData )))
322
- .in (databaseName )
323
312
.bind (entityList ).to (Constants .NAME_OF_ENTITY_LIST_PARAM ).run ();
324
313
325
314
// Save related
326
315
entitiesToBeSaved .forEach (entityToBeSaved -> processRelations (entityMetaData , entityToBeSaved ,
327
- isNewIndicator .get (entitiesToBeSaved .indexOf (entityToBeSaved )), databaseName ));
316
+ isNewIndicator .get (entitiesToBeSaved .indexOf (entityToBeSaved ))));
328
317
329
318
SummaryCounters counters = resultSummary .counters ();
330
319
log .debug (() -> String .format (
@@ -345,7 +334,7 @@ public <T> void deleteById(Object id, Class<T> domainType) {
345
334
log .debug (() -> String .format ("Deleting entity with id %s " , id ));
346
335
347
336
Statement statement = cypherGenerator .prepareDeleteOf (entityMetaData , condition );
348
- ResultSummary summary = this .neo4jClient .query (renderer .render (statement )). in ( getDatabaseName ())
337
+ ResultSummary summary = this .neo4jClient .query (renderer .render (statement ))
349
338
.bind (convertIdValues (entityMetaData .getRequiredIdProperty (), id ))
350
339
.to (nameOfParameter ).run ();
351
340
@@ -389,8 +378,8 @@ public <T> void deleteAllById(Iterable<?> ids, Class<T> domainType) {
389
378
log .debug (() -> String .format ("Deleting all entities with the following ids: %s " , ids ));
390
379
391
380
Statement statement = cypherGenerator .prepareDeleteOf (entityMetaData , condition );
392
- ResultSummary summary = this .neo4jClient .query (renderer .render (statement )). in ( getDatabaseName ()). bind (
393
- convertIdValues (entityMetaData .getRequiredIdProperty (), ids ))
381
+ ResultSummary summary = this .neo4jClient .query (renderer .render (statement ))
382
+ . bind ( convertIdValues (entityMetaData .getRequiredIdProperty (), ids ))
394
383
.to (nameOfParameter ).run ();
395
384
396
385
log .debug (() -> String .format ("Deleted %d nodes and %d relationships." , summary .counters ().nodesDeleted (),
@@ -404,7 +393,7 @@ public void deleteAll(Class<?> domainType) {
404
393
log .debug (() -> String .format ("Deleting all nodes with primary label %s" , entityMetaData .getPrimaryLabel ()));
405
394
406
395
Statement statement = cypherGenerator .prepareDeleteOf (entityMetaData );
407
- ResultSummary summary = this .neo4jClient .query (renderer .render (statement )).in ( getDatabaseName ()). run ();
396
+ ResultSummary summary = this .neo4jClient .query (renderer .render (statement )).run ();
408
397
409
398
log .debug (() -> String .format ("Deleted %d nodes and %d relationships." , summary .counters ().nodesDeleted (),
410
399
summary .counters ().relationshipsDeleted ()));
@@ -434,14 +423,14 @@ private <T> ExecutableQuery<T> createExecutableQuery(Class<T> domainType, String
434
423
}
435
424
436
425
private <T > T processRelations (Neo4jPersistentEntity <?> neo4jPersistentEntity , Object parentObject ,
437
- boolean isParentObjectNew , @ Nullable String inDatabase ) {
426
+ boolean isParentObjectNew ) {
438
427
439
- return processNestedRelations (neo4jPersistentEntity , parentObject , isParentObjectNew , inDatabase ,
428
+ return processNestedRelations (neo4jPersistentEntity , parentObject , isParentObjectNew ,
440
429
new NestedRelationshipProcessingStateMachine ());
441
430
}
442
431
443
432
private <T > T processNestedRelations (Neo4jPersistentEntity <?> sourceEntity , Object parentObject ,
444
- boolean isParentObjectNew , @ Nullable String inDatabase , NestedRelationshipProcessingStateMachine stateMachine ) {
433
+ boolean isParentObjectNew , NestedRelationshipProcessingStateMachine stateMachine ) {
445
434
446
435
PersistentPropertyAccessor <?> propertyAccessor = sourceEntity .getPropertyAccessor (parentObject );
447
436
Object fromId = propertyAccessor .getProperty (sourceEntity .getRequiredIdProperty ());
@@ -492,7 +481,7 @@ private <T> T processNestedRelations(Neo4jPersistentEntity<?> sourceEntity, Obje
492
481
493
482
Statement relationshipRemoveQuery = cypherGenerator .prepareDeleteOf (sourceEntity , relationshipDescription );
494
483
495
- neo4jClient .query (renderer .render (relationshipRemoveQuery )). in ( inDatabase )
484
+ neo4jClient .query (renderer .render (relationshipRemoveQuery ))
496
485
.bind (convertIdValues (sourceEntity .getIdProperty (), fromId )) //
497
486
.to (Constants .FROM_ID_PARAMETER_NAME ) //
498
487
.bind (knownRelationshipsIds ) //
@@ -518,12 +507,12 @@ private <T> T processNestedRelations(Neo4jPersistentEntity<?> sourceEntity, Obje
518
507
relatedNode = eventSupport .maybeCallBeforeBind (relatedNode );
519
508
520
509
Long relatedInternalId = saveRelatedNode (relatedNode , relationshipContext .getAssociationTargetType (),
521
- targetEntity , inDatabase );
510
+ targetEntity );
522
511
523
512
CreateRelationshipStatementHolder statementHolder = neo4jMappingContext .createStatement (
524
513
sourceEntity , relationshipContext , relatedValueToStore );
525
514
526
- Optional <Long > relationshipInternalId = neo4jClient .query (renderer .render (statementHolder .getStatement ())). in ( inDatabase )
515
+ Optional <Long > relationshipInternalId = neo4jClient .query (renderer .render (statementHolder .getStatement ()))
527
516
.bind (convertIdValues (sourceEntity .getRequiredIdProperty (), fromId )) //
528
517
.to (Constants .FROM_ID_PARAMETER_NAME )
529
518
.bind (relatedInternalId ) //
@@ -543,7 +532,7 @@ private <T> T processNestedRelations(Neo4jPersistentEntity<?> sourceEntity, Obje
543
532
targetPropertyAccessor .setProperty (targetEntity .getRequiredIdProperty (), relatedInternalId );
544
533
}
545
534
if (processState != ProcessState .PROCESSED_ALL_VALUES ) {
546
- processNestedRelations (targetEntity , targetPropertyAccessor .getBean (), isEntityNew , inDatabase , stateMachine );
535
+ processNestedRelations (targetEntity , targetPropertyAccessor .getBean (), isEntityNew , stateMachine );
547
536
}
548
537
}
549
538
@@ -553,14 +542,12 @@ private <T> T processNestedRelations(Neo4jPersistentEntity<?> sourceEntity, Obje
553
542
return (T ) propertyAccessor .getBean ();
554
543
}
555
544
556
- private <Y > Long saveRelatedNode (Object entity , Class <Y > entityType , NodeDescription targetNodeDescription ,
557
- @ Nullable String inDatabase ) {
545
+ private <Y > Long saveRelatedNode (Object entity , Class <Y > entityType , NodeDescription targetNodeDescription ) {
558
546
559
- DynamicLabels dynamicLabels = determineDynamicLabels (entity , (Neo4jPersistentEntity ) targetNodeDescription ,
560
- inDatabase );
547
+ DynamicLabels dynamicLabels = determineDynamicLabels (entity , (Neo4jPersistentEntity ) targetNodeDescription );
561
548
Optional <Long > optionalSavedNodeId = neo4jClient
562
549
.query (() -> renderer .render (cypherGenerator .prepareSaveOf (targetNodeDescription , dynamicLabels )))
563
- .in ( inDatabase ). bind ((Y ) entity ).with (neo4jMappingContext .getRequiredBinderFunctionFor (entityType ))
550
+ .bind ((Y ) entity ).with (neo4jMappingContext .getRequiredBinderFunctionFor (entityType ))
564
551
.fetchAs (Long .class ).one ();
565
552
566
553
if (((Neo4jPersistentEntity ) targetNodeDescription ).hasVersionProperty () && !optionalSavedNodeId .isPresent ()) {
@@ -570,11 +557,6 @@ private <Y> Long saveRelatedNode(Object entity, Class<Y> entityType, NodeDescrip
570
557
return optionalSavedNodeId .get ();
571
558
}
572
559
573
- private String getDatabaseName () {
574
-
575
- return this .databaseSelectionProvider .getDatabaseSelection ().getValue ();
576
- }
577
-
578
560
@ Override
579
561
public void setBeanFactory (BeanFactory beanFactory ) throws BeansException {
580
562
@@ -676,7 +658,7 @@ private Optional<Neo4jClient.RecordFetchSpec<T>> createFetchSpec() {
676
658
}
677
659
678
660
Neo4jClient .MappingSpec <T > newMappingSpec = neo4jClient .query (cypherQuery )
679
- .in ( getDatabaseName ()). bindAll (finalParameters ).fetchAs (preparedQuery .getResultType ());
661
+ .bindAll (finalParameters ).fetchAs (preparedQuery .getResultType ());
680
662
return Optional .of (preparedQuery .getOptionalMappingFunction ()
681
663
.map (f -> newMappingSpec .mappedBy (f )).orElse (newMappingSpec ));
682
664
}
@@ -690,7 +672,7 @@ private GenericQueryAndParameters createQueryAndParameters(Neo4jPersistentEntity
690
672
.returning (Constants .NAME_OF_SYNTHESIZED_ROOT_NODE ).build ();
691
673
692
674
final Collection <Long > rootNodeIds = new HashSet <>((Collection <Long >) neo4jClient
693
- .query (renderer .render (rootNodesStatement )). in ( getDatabaseName ())
675
+ .query (renderer .render (rootNodesStatement ))
694
676
.bindAll (parameters )
695
677
.fetch ()
696
678
.one ()
@@ -716,7 +698,7 @@ private GenericQueryAndParameters createQueryAndParameters(Neo4jPersistentEntity
716
698
.prepareMatchOf (entityMetaData , relationshipDescription , queryFragments .getMatchOn (), queryFragments .getCondition ())
717
699
.returning (cypherGenerator .createReturnStatementForMatch (entityMetaData )).build ();
718
700
719
- neo4jClient .query (renderer .render (statement )). in ( getDatabaseName ())
701
+ neo4jClient .query (renderer .render (statement ))
720
702
.bindAll (parameters )
721
703
.fetch ()
722
704
.one ()
@@ -739,7 +721,7 @@ private void iterateNextLevel(Collection<Long> nodeIds, Neo4jPersistentEntity<?>
739
721
Functions .id (node ).in (Cypher .parameter (Constants .NAME_OF_IDS )))
740
722
.returning (cypherGenerator .createGenericReturnStatement ()).build ();
741
723
742
- neo4jClient .query (renderer .render (statement )). in ( getDatabaseName ())
724
+ neo4jClient .query (renderer .render (statement ))
743
725
.bindAll (Collections .singletonMap (Constants .NAME_OF_IDS , nodeIds ))
744
726
.fetch ()
745
727
.one ()
0 commit comments