18
18
import static org .assertj .core .api .Assertions .assertThat ;
19
19
20
20
import java .util .AbstractMap ;
21
+ import java .util .ArrayList ;
21
22
import java .util .Collection ;
22
- import java .util .Collections ;
23
23
import java .util .List ;
24
24
import java .util .Map ;
25
25
import java .util .Optional ;
48
48
import org .springframework .data .neo4j .core .Neo4jTemplate ;
49
49
import org .springframework .data .neo4j .core .transaction .Neo4jBookmarkManager ;
50
50
import org .springframework .data .neo4j .core .transaction .Neo4jTransactionManager ;
51
+ import org .springframework .data .neo4j .integration .issues .gh2451 .WidgetEntity ;
52
+ import org .springframework .data .neo4j .integration .issues .gh2451 .WidgetProjection ;
53
+ import org .springframework .data .neo4j .integration .issues .gh2451 .WidgetRepository ;
51
54
import org .springframework .data .neo4j .integration .shared .common .DepartmentEntity ;
52
- import org .springframework .data .neo4j .integration .shared .common .PersonDepartmentQueryResult ;
53
- import org .springframework .data .neo4j .integration .shared .common .PersonEntity ;
54
55
import org .springframework .data .neo4j .integration .shared .common .NamesOnly ;
55
56
import org .springframework .data .neo4j .integration .shared .common .NamesOnlyDto ;
56
57
import org .springframework .data .neo4j .integration .shared .common .NamesWithSpELCity ;
57
58
import org .springframework .data .neo4j .integration .shared .common .Person ;
59
+ import org .springframework .data .neo4j .integration .shared .common .PersonDepartmentQueryResult ;
60
+ import org .springframework .data .neo4j .integration .shared .common .PersonEntity ;
58
61
import org .springframework .data .neo4j .integration .shared .common .PersonSummary ;
59
62
import org .springframework .data .neo4j .integration .shared .common .ProjectionTest1O1 ;
60
63
import org .springframework .data .neo4j .integration .shared .common .ProjectionTestLevel1 ;
@@ -133,6 +136,9 @@ void setup() {
133
136
projectionTestRootId = result .get (0 ).asLong ();
134
137
projectionTestLevel1Id = result .get (1 ).asLong ();
135
138
projectionTest1O1Id = result .get (2 ).asLong ();
139
+
140
+ transaction .run ("create (w:Widget {code: 'Window1', label: 'yyy'})" ).consume ();
141
+
136
142
transaction .commit ();
137
143
bookmarkCapture .seedWith (session .lastBookmark ());
138
144
}
@@ -365,6 +371,22 @@ void projectionsContainingKnownEntitiesShouldWorkFromTemplate(@Autowired Neo4jTe
365
371
.satisfies (ProjectionIT ::projectedEntities );
366
372
}
367
373
374
+ @ Test // GH-2451
375
+ void compositePropertiesShouldBeIncludedInProjections (@ Autowired WidgetRepository repository ,
376
+ @ Autowired Neo4jTemplate template ) {
377
+
378
+ String code = "Window1" ;
379
+ WidgetEntity window = repository .findByCode (code ).get ();
380
+ window .setLabel ("changed" );
381
+ window .getAdditionalFields ().put ("key1" , "value1" );
382
+
383
+ template .saveAs (window , WidgetProjection .class );
384
+
385
+ window = repository .findByCode (code ).get ();
386
+ assertThat (window .getLabel ()).isEqualTo ("changed" );
387
+ assertThat (window .getAdditionalFields ()).containsEntry ("key1" , "value1" );
388
+ }
389
+
368
390
private static void projectedEntities (PersonDepartmentQueryResult personAndDepartment ) {
369
391
assertThat (personAndDepartment .getPerson ()).extracting (PersonEntity ::getId ).isEqualTo ("p1" );
370
392
assertThat (
personAndDepartment .
getPerson ()).
extracting (
PersonEntity ::
getEmail ).
isEqualTo (
"[email protected] " );
@@ -479,7 +501,7 @@ interface PersonRepository extends Neo4jRepository<PersonEntity, String> {
479
501
}
480
502
481
503
@ Configuration
482
- @ EnableNeo4jRepositories (considerNestedRepositories = true )
504
+ @ EnableNeo4jRepositories (considerNestedRepositories = true , basePackageClasses = { ProjectionIT . class , WidgetEntity . class } )
483
505
@ EnableTransactionManagement
484
506
static class Config extends AbstractNeo4jConfig {
485
507
@@ -495,7 +517,11 @@ public BookmarkCapture bookmarkCapture() {
495
517
496
518
@ Override
497
519
protected Collection <String > getMappingBasePackages () {
498
- return Collections .singletonList (DepartmentEntity .class .getPackage ().getName ());
520
+
521
+ List <String > packages = new ArrayList <>();
522
+ packages .add (DepartmentEntity .class .getPackage ().getName ());
523
+ packages .add (WidgetEntity .class .getPackage ().getName ());
524
+ return packages ;
499
525
}
500
526
501
527
@ Override
0 commit comments