Skip to content

Commit 790b67c

Browse files
committed
GH-2289 - Mark obverse relationship as processed while persisting.
1 parent 8422bf9 commit 790b67c

File tree

4 files changed

+32
-6
lines changed

4 files changed

+32
-6
lines changed

src/main/java/org/springframework/data/neo4j/core/Neo4jTemplate.java

+1
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,7 @@ private <T> T processNestedRelations(Neo4jPersistentEntity<?> sourceEntity, Pers
745745
TemplateSupport.updateVersionPropertyIfPossible(targetEntity, targetPropertyAccessor, savedEntity);
746746
}
747747
stateMachine.markValueAsProcessedAs(relatedObjectBeforeCallbacksApplied, targetPropertyAccessor.getBean());
748+
stateMachine.markRelationshipAsProcessed(relatedInternalId, relationshipDescription.getRelationshipObverse());
748749

749750
Object idValue = idProperty != null
750751
? relationshipContext

src/main/java/org/springframework/data/neo4j/core/mapping/NestedRelationshipProcessingStateMachine.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,10 @@ public int hashCode() {
143143
*
144144
* @param relationshipDescription To be marked as processed
145145
*/
146-
public void markRelationshipAsProcessed(Object fromId, RelationshipDescription relationshipDescription) {
146+
public void markRelationshipAsProcessed(Object fromId, @Nullable RelationshipDescription relationshipDescription) {
147+
if (relationshipDescription == null) {
148+
return;
149+
}
147150

148151
try {
149152
write.lock();

src/test/java/org/springframework/data/neo4j/integration/issues/gh2289/GH2289IT.java

+18-5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import static org.assertj.core.api.Assertions.assertThat;
1919

20+
import org.assertj.core.api.Assertions;
2021
import org.junit.jupiter.api.BeforeAll;
2122
import org.junit.jupiter.api.RepeatedTest;
2223
import org.neo4j.driver.Driver;
@@ -70,17 +71,29 @@ void testNewRelation(@Autowired SkuRepository skuRepo) {
7071
a.rangeRelationTo(d, 1, 1, RelationType.MULTIPLICATIVE);
7172
a = skuRepo.save(a);
7273

73-
assertThat(a.getRangeRelationsOut()).hasSize(3);
74+
Assertions.assertThat(a.getRangeRelationsOut()).hasSize(3);
7475
b = skuRepo.findById(b.getId()).get();
75-
assertThat(b.getRangeRelationsIn()).hasSize(1);
76+
Assertions.assertThat(b.getRangeRelationsIn()).hasSize(1);
77+
78+
Assertions.assertThat(b.getRangeRelationsIn().stream().findFirst().get().getTargetSku().getRangeRelationsOut()).hasSize(3);
7679

7780
b.rangeRelationTo(c, 1, 1, RelationType.MULTIPLICATIVE);
7881
b = skuRepo.save(b);
79-
assertThat(b.getRangeRelationsIn()).hasSize(1);
80-
assertThat(b.getRangeRelationsOut()).hasSize(1);
82+
Assertions.assertThat(b.getRangeRelationsIn()).hasSize(1);
83+
Assertions.assertThat(b.getRangeRelationsOut()).hasSize(1);
84+
85+
a = skuRepo.findById(a.getId()).get();
86+
Assertions.assertThat(a.getRangeRelationsOut()).hasSize(3);
87+
Assertions.assertThat(a.getRangeRelationsOut()).allSatisfy(r -> {
88+
int expectedSize = 1;
89+
if ("C".equals(r.getTargetSku().getName())) {
90+
expectedSize = 2;
91+
}
92+
Assertions.assertThat(r.getTargetSku().getRangeRelationsIn()).hasSize(expectedSize);
93+
});
8194
}
8295

83-
@RepeatedTest(5) // GH-2294
96+
@RepeatedTest(5) // GH-2294
8497
void testNewRelationRo(@Autowired SkuRORepository skuRepo) {
8598
SkuRO a = skuRepo.findOneByName("A");
8699
SkuRO b = skuRepo.findOneByName("B");

src/test/java/org/springframework/data/neo4j/integration/issues/gh2289/Sku.java

+9
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,13 @@ public RangeRelation rangeRelationTo(Sku sku, double minDelta, double maxDelta,
6262
sku.rangeRelationsIn.add(relationIn);
6363
return relationOut;
6464
}
65+
66+
@Override
67+
public String toString() {
68+
return "Sku{" +
69+
"id=" + id +
70+
", number=" + number +
71+
", name='" + name +
72+
'}';
73+
}
6574
}

0 commit comments

Comments
 (0)