Как сохранить только один раз в моей базе данных внешний объект, полученный через WS, но несколько раз упомянутый ниже в моем основном объекте? - PullRequest
0 голосов
/ 20 марта 2019

Вот моя ситуация: у меня есть объект ObjectA, который содержит список ObjectB, а в ObjectB у меня есть ObjectC, полученный через веб-сервис от третьей стороны.

public class ObjectA{
    @OneToMany(cascade={CascadeType.ALL})
    private List<ObjectB> listObjectB;
}

public class ObjectB{
    @ManyToOne(cascade={CascadeType.ALL})
    private ObjectC objectC;
}

Как только пользователь пытается сохранить ObjectA, сохранение распространяется по цепочке и пытается сохранить все. Однако ObjectC должен быть уникальным. И чтобы убедиться, что, как только я получу ObjectC от веб-службы, я ищу в своей базе данных существующую копию, и в случае ее наличия я заменю всю ObjectC своей копией в базе данных.

Но может случиться так, что ObjectA имеет несколько ObjectB, относящихся к тому же несохраненному ObjectC. Когда это происходит, и я пытаюсь сохранить ObjectA из-за каскада, я получаю сообщение об ошибке, потому что пытаюсь сохранить один и тот же ObjectC несколько раз.

Как я могу сохранить ObjectC и предотвратить это?

...