как обработать переход откатить исключение весной?

1

То, что я хочу, довольно просто: проверка идентификатора узла.

Структура проекта: Контроллер (конечная точка) - Служба - DAO. @transaction в слое службы, проверка на уровне сервиса.

В конечной точке перейдите в объект DTO. Проверка идентификатора узла на уровне сервиса и сохранение базы данных neo4j в слое DAO. В объекте DTO (egStudent) я передаю идентификатор другого узла (egClass), который используется для настройки отношений ученика и класса. Перед сохранением я выполняю проверку для идентификатора узла (класса).

Если я использую repository.findOne(id) и передаю идентификатор узла, который существует в базе данных, но неправильный тип. Это повысит: org.neo4j.graphdb.NotFoundException: '__type__' property not found for RelationshipImpl #10118 of type 36 between Node[7054] and Node[6726] что приведет к следующему исключению:

nested exception is org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is javax.transaction.RollbackException: Failed to commit, transaction rolledback

Если я использую следующий запрос и передаю идентификатор узла, который не существует в базе данных

start node1 = node(id)
return node1

org.neo4j.cypher.EntityNotFoundException будет поднято и приведет к UnexpectedRollbackException.

Есть ли способ, чтобы я поймал эти исключения и вернул null или false без UnexpectedRollbackException?

Или я могу проверить, что идентификатор узла существует в базе данных легко?

  • 0
    01) Запутайте свое «требование», не поделитесь ли вы объявлением метода с @Transactional, которое выдает исключение? 02) Вы получаете нулевой объект или исключение?
  • 0
    Возможно, вы можете поделиться немного больше своего кода? Например, вы можете использовать repository.findOne(id)
Теги:
spring
neo4j
cypher

1 ответ

0
Лучший ответ

Исправьте это, используя:

  1. Для узла:

            Node node = neo4jTemplate.getNode(id);
            String type = (String) node.getProperty("__type__");
            if (!type.equals(nodeClass.getName())) {
                throw new ResultNotFoundException("No such object (" + nodeClass.getSimpleName() + ": id=" + id + ") in database");
            }
            return neo4jTemplate.projectTo(node, nodeClass);
    
  2. Для отношений

            Relationship relationship = neo4jTemplate.getRelationship(id);
            String type = (String) relationship.getProperty("__type__");
            if (!type.equals(nodeClass.getName())) {
                throw new ResultNotFoundException("No such object (" + nodeClass.getSimpleName() + ": id=" + id + ") in database");
            }
            return neo4jTemplate.projectTo(relationship, nodeClass);
    

Ещё вопросы

Сообщество Overcoder
Наверх
Меню