Как мне скопировать все отношения с одного узла на другой? - PullRequest
0 голосов
/ 27 июня 2018

Фон

У меня есть абстрактный класс Invoke

Его можно создать как 2 отдельных класса, расширяющих invoke: bigInvoke и smallInvoke.

Я пытаюсь создать API с запросом Invoke PUT, который позволяет пользователю изменять класс своего вызова с большого на маленький или наоборот.

Мой код пока что

BigInvoke.java выглядит так:

@NodeEntity
public class BigInvoke extends Invoke {
    private String command;

    public BigInvoke(){
        this.invokeType = InvokeType.BigInvoke;
    }

    /**
     * @return the command
     */
    public String getCommand() {
        return command;
    }

    /**
     * @param command the command to set
     */
    public void setCommand(String command) {
        this.command = command;
    }
}

И в моем invokeService.java у меня есть:

    @Override
    public Invoke update(UUID uuid, Invoke invoke) {
        Invoke i = find(uuid);
        i.setInvokeType(invoke.getInvokeType());
        invokeRepository.save(i);
        return invoke;
    }

Задача 1

Но это только меняет значение переменной invokeType, но фактически не меняет класс invoke.

Как мне изменить класс?


Мой код для попытки № 2

    @Override
    public Invoke update(UUID uuid, Invoke invoke) {
        Invoke i = find(uuid);
        UUID oldUUID =  i.getUuid();
        //make new one
        Invoke newInvoke = new Invoke();
        newInvoke.setInvokeType(invoke.getInvokeType());
        //Delete old one
        invokeRepository.deleteById(i.getUuid());
        newInvoke.setUuid(oldUUID);
        invokeRepository.save(newInvoke);
        return newInvoke;
    }

Проблема с # 2

Этот работает в том смысле, что у сущности теперь есть все атрибуты, которые я хочу, но deleteById удаляет все ссылки на мой Invoke. Так что мой newInvoke больше не имеет отношения старшего вызова. Так что на самом деле это не работает.

Вопрос

Как мне изменить класс своей сущности и сохранить все отношения и UUID?

Редактировать 1 код SmallInvoke

@NodeEntity
public class SmallInvoke extends Invoke {
    private String smallCode;

    public SmallInvoke() {
        this.invokeType = InvokeType.SmallInvoke;
    }

    /**
     * @return the smallCode
     */
    public String getSmallCode() {
        return smallCode;
    }

    /**
     * @param smallCode
     *            the smallCode to set
     */
    public void setSmallCode(String smallCode) {
        this.smallCode = smallCode;
    }
}

РЕДАКТИРОВАТЬ 2 Информация о InvokeRepository

InvokeRepository расширяет GenericRepository

GenericRepository расширяет Neo4jRepository

...