Фон
У меня есть абстрактный класс 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