Lambdas нельзя сериализовать, поэтому вы получаете это исключение.Кроме того, лямбды не поддерживаются в Нептуне , поэтому ваш подход все равно не сработает.Ваши эксперименты с TinkerGraph сработали, потому что у него нет ни одного из этих ограничений.
Я не уверен, что вы можете сделать, чтобы обойти эту проблему, потому что вы упомянули, что:
Мне действительно нужноспособ определить, почему обход был прерван.
Может быть, вы могли бы каким-то образом использовать constant()
?
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().has('person','name','marko').fold().coalesce(unfold(), constant('Not Found'))
==>v[1]
gremlin> g.V().has('person','name','x').fold().coalesce(unfold(), constant('Not Found'))
==>Not Found
Я не уверен, что это будет работать идеально, потому что выхотите
оставить график без изменений
В зависимости от того, как вы пишете свой Gremlin, это не сработало бы даже в TinkerGraph.constant()
не является «условием ошибки», которое будет распознаваться как метод отката транзакции.Возможно, это просто то, что нужно знать.В зависимости от того, насколько сложна ваша логика, у вас может получиться действительно трудный для чтения Gremlin.Возможно, вам придется пересмотреть свой подход.