Class NestedRelationshipProcessingStateMachine
java.lang.Object
org.springframework.data.neo4j.core.mapping.NestedRelationshipProcessingStateMachine
@API(status=INTERNAL,
since="6.0")
public final class NestedRelationshipProcessingStateMachine
extends Object
This stores all processed nested relations and objects during save of objects so that the recursive descent can be
stopped accordingly.
- Author:
- Michael J. Simons
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enum
Valid processing states.static interface
Reactive Supplier for arbitrary relationship idsstatic interface
Supplier for arbitrary relationship ids -
Constructor Summary
ConstructorsConstructorDescriptionNestedRelationshipProcessingStateMachine
(Neo4jMappingContext mappingContext) NestedRelationshipProcessingStateMachine
(Neo4jMappingContext mappingContext, Object initialObject, Object elementId) -
Method Summary
Modifier and TypeMethodDescriptiongetObjectId
(Object object) This returns an id for the given object.getProcessedAs
(Object entity) Collection<org.springframework.data.neo4j.core.mapping.NestedRelationshipProcessingStateMachine.RelationshipIdUpdateContext>
getStateOf
(Object fromId, RelationshipDescription relationshipDescription, Collection<?> valuesToStore) boolean
hasProcessedRelationship
(Object fromId, RelationshipDescription relationshipDescription) Checks if the relationship has already been processed.boolean
hasProcessedRelationshipEntity
(Object source, Object target, RelationshipDescription type) boolean
hasProcessedValue
(Object value) Checks if the value has already been processed.void
markAsAliased
(Object aliasEntity, Object entityOrId) void
markAsUpdated
(org.springframework.data.neo4j.core.mapping.NestedRelationshipProcessingStateMachine.RelationshipIdUpdateContext context) void
markEntityAsProcessed
(Object valueToStore, Object elementId) Marks the passed objects as processedvoid
markRelationshipAsProcessed
(Object fromId, RelationshipDescription relationshipDescription) Marks the passed objects as processedvoid
registerInitialObject
(Object initialObject, Object elementId) void
requireIdUpdate
(Neo4jPersistentEntity<?> sourceEntity, RelationshipDescription relationshipDescription, boolean canUseElementId, Object fromId, Object toId, NestedRelationshipContext relationshipContext, Object relatedValueToStore, Neo4jPersistentProperty idProperty) void
storeProcessRelationshipEntity
(MappingSupport.RelationshipPropertiesWithEntityHolder id, Object source, Object target, RelationshipDescription type) reactor.core.publisher.Mono<Void>
updateRelationshipIds
(NestedRelationshipProcessingStateMachine.ReactiveRelationshipIdSupplier idSupplier) void
-
Constructor Details
-
NestedRelationshipProcessingStateMachine
-
NestedRelationshipProcessingStateMachine
public NestedRelationshipProcessingStateMachine(Neo4jMappingContext mappingContext, @Nullable Object initialObject, @Nullable Object elementId)
-
-
Method Details
-
registerInitialObject
-
getStateOf
public NestedRelationshipProcessingStateMachine.ProcessState getStateOf(@Nullable Object fromId, RelationshipDescription relationshipDescription, @Nullable Collection<?> valuesToStore) - Parameters:
relationshipDescription
- Check whether this relationship description has been processedvaluesToStore
- Check whether all the values in the collection have been processed- Returns:
- The state of things processed
-
markRelationshipAsProcessed
public void markRelationshipAsProcessed(Object fromId, @Nullable RelationshipDescription relationshipDescription) Marks the passed objects as processed- Parameters:
relationshipDescription
- To be marked as processed
-
markEntityAsProcessed
Marks the passed objects as processed- Parameters:
valueToStore
- If not null, all non-null values will be marked as processedelementId
- The internal id of the value processed
-
hasProcessedValue
Checks if the value has already been processed.- Parameters:
value
- the object that should be looked for in the registry.- Returns:
- processed yes (true) / no (false)
-
hasProcessedRelationship
public boolean hasProcessedRelationship(Object fromId, @Nullable RelationshipDescription relationshipDescription) Checks if the relationship has already been processed.- Parameters:
relationshipDescription
- the relationship that should be looked for in the registry.- Returns:
- processed yes (true) / no (false)
-
storeProcessRelationshipEntity
public void storeProcessRelationshipEntity(MappingSupport.RelationshipPropertiesWithEntityHolder id, Object source, Object target, RelationshipDescription type) -
hasProcessedRelationshipEntity
public boolean hasProcessedRelationshipEntity(Object source, Object target, RelationshipDescription type) -
requireIdUpdate
public void requireIdUpdate(Neo4jPersistentEntity<?> sourceEntity, RelationshipDescription relationshipDescription, boolean canUseElementId, Object fromId, Object toId, NestedRelationshipContext relationshipContext, Object relatedValueToStore, Neo4jPersistentProperty idProperty) -
getRequiresIdUpdate
public Collection<org.springframework.data.neo4j.core.mapping.NestedRelationshipProcessingStateMachine.RelationshipIdUpdateContext> getRequiresIdUpdate() -
markAsUpdated
public void markAsUpdated(org.springframework.data.neo4j.core.mapping.NestedRelationshipProcessingStateMachine.RelationshipIdUpdateContext context) -
updateRelationshipIds
public void updateRelationshipIds(NestedRelationshipProcessingStateMachine.RelationshipIdSupplier idSupplier) -
updateRelationshipIds
public reactor.core.publisher.Mono<Void> updateRelationshipIds(NestedRelationshipProcessingStateMachine.ReactiveRelationshipIdSupplier idSupplier) -
markAsAliased
-
getObjectId
This returns an id for the given object. We deliberate use the wording of a generic object id as that might either be the Neo4j 5+ elementId() or on older Neo4j versions or with older data modulestoString(id())
.- Parameters:
object
- The object for which an id is requested- Returns:
- The objects id
-
getProcessedAs
-