google app engine java jpa один ко многим удалить - PullRequest
5 голосов
/ 28 октября 2011

В движке Google App java jpa отношение один ко многим, как мне удалить дочерние элементы. Например

Class Parent{
   // key defined here

   @OneToMany(cascade=CascadeType.ALL, mappedBy="parent")
   private List<Child> childs = null;
.
.
.
}

Class child{
//key defined here too
@ManyToOne
private Parent parent;
.
.
.
}

Я создал

Parent parent=new Parent()
parent.getChilds().add(new Child(1));
parent.getChilds().add(new Child(2));
//save parent 
.
.

и теперь я хочу удалить обоих потомков 1 и 2 и добавить нового потомка 3

Parent p=//getParent
p.setChilds(new ArrayList<Child>())//remove all older childs
parent.getChilds().add(new Child(3));//adding new child 3
.
.

Но когда я снова получаю одного и того же родителя, у меня появляются все 3 ребенка, но не только ребенок 3.

Может кто-нибудь, пожалуйста, ведите меня.

Спасибо, Ramesh.V

Ответы [ 2 ]

0 голосов
/ 01 ноября 2011

Вы можете попробовать удалить связь со стороны владельца - в этом случае Child # parent.Поэтому для каждого дочернего элемента в родительской коллекции попробуйте либо: удалить дочерний элемент, либо установить для родительского элемента значение null.Что-то вроде:

Parent p = //getParent
List<Child> children = p.getChildren();
for (Child c : children) {
    c.setParent(null);
}

children.clear();
children.add(new Child(3));
0 голосов
/ 28 октября 2011

Возможно, сделайте

parent.getChilds().clear();

, поскольку это экономит удаление и воссоздание Списка, и может иметь дополнительное преимущество в обходе некоторых проблем GAE.PS.множественное число от «ребенка» - это «дети»!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...