Neo4j RelationshipEntity не создан

У меня возникают проблемы с сохранением neo4j RelationshipEntity с помощью Spring Boot. Я использую spring-boot-starter-data-neo4j (2.1.0.RELEASE) и образ докера neo4j с тегом 3.4.9.

У меня есть простой NodeEntity, который содержит коллекцию для RelationshipEntity:

@NodeEntity
public class Book {
    @Id
    @GeneratedValue
    private Long id;
    private String name;

    public Book() {}

    public Book(String name) {
        this.name = name;
    }

    @Relationship(type = "PURCHASED_WITH", direction = "OUTGOING")
    private Set<BookPurchase> purchases = new HashSet<>();

    // getters and setters follow
}

У меня есть еще один NodeEntity, который также содержит коллекцию для сущности отношения:

@NodeEntity
public class CreditCard {

    @Id
    @GeneratedValue
    private Long id;
    private String number;

    @DateString(value = "yyyy-MM-dd")
    private Date expiryDate;

    public CreditCard() {}

    public CreditCard(String number, Date expiryDate) {
        this.number = number;
        this.expiryDate = expiryDate;
    }

    @Relationship(type = "PURCHASED_WITH", direction = "INCOMING")
    private Set<BookPurchase> purchases = new HashSet<BookPurchase>(); 

    // getters and setters follow
}

У меня есть RelationshipEntity, которые добавляют ссылки на оба класса NodeEntity в конструкторе:

@RelationshipEntity(type = "PURCHASED_WITH")
public class BookPurchase {
    @Id
    @GeneratedValue
    private long id;

    @DateString("yyyy-MM-dd")
    Date purchaseDate;

    @StartNode
    private Book book;

    @EndNode
    private CreditCard card;

    public BookPurchase(){}

    public BookPurchase(CreditCard card, Book book, Date purchaseDate) {
        this.card = card;
        this.book = book;
        this.purchaseDate = purchaseDate;

        this.card.getPurchases().add(this);
        this.book.getPurchases().add(this);
    }
    // getters and setters follow
}

И, наконец, у меня есть контроллер Spring, связывающий все вместе:

@RestController
public class ExamplesController {

    @Autowired
    CreditCardRepository creditCardRepository;

    @PostMapping(value = "/purchases")
    public String createPurchases() {
        CreditCard card = new CreditCard("11111", new GregorianCalendar(2018, Calendar.FEBRUARY, 12).getTime());

        Book book1 = new Book("of mice and men");
        BookPurchase purchase1 = new BookPurchase(card,book1,new GregorianCalendar(2018, Calendar.MARCH, 15).getTime());

        creditCardRepository.save(card);
        return "Successfully created entities";
    }
}

Всякий раз, когда я пытаюсь запустить curl -X POST http://localhost:8080/purchases, я просто вижу следующее в браузере neo4j - RelationshipEntity не сохраняется, только узлы.

Кто-нибудь может помочь?

Neo4j RelationshipEntity не создан

Что возвращает MATCH (n) OPTIONAL MATCH ()-[r]->() RETURN *? Показанный вами запрос возвращает только узлы, и по умолчанию (в зависимости от версии Neo4j) автоматическое связывание отношений в браузере отключено (и вы не сказали, нажали ли вы кнопку развертывания отношений в нижней части круга параметров)

Tezra 15.11.2018 21:11

@Tezra, спасибо за ответ. Я получаю тот же результат с указанным выше запросом. Кроме того, браузер указывает, что в представлении «Информация о базе данных» есть «Нет взаимосвязей в базе данных».

dwaynetherock 16.11.2018 02:35
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
2
277
1

Ответы 1

Спасибо Геррит Мейер за ответ на этот вопрос. Мой RelationshipEntity использовал примитив long вместо объекта / оболочки Long. Подробная информация здесь: https://community.neo4j.com/t/neo4j-relationshipentity-not-persisted/3039

Другие вопросы по теме