hibernate - Spring Data JPA - ManyToOne unable to delete child without modifying parent list -


i struggle week following problem:

how possible delete child entity through repository without modifying list on owning (parent) side of relation?

thanks in advance.

i hoping answers!

the child class:

@entity @table(name = "child") @cache(usage = cacheconcurrencystrategy.nonstrict_read_write) public class child implements serializable {      private static final long serialversionuid = 1l;      @id     @generatedvalue(strategy = generationtype.sequence, generator = "sequencegenerator")     @sequencegenerator(name = "sequencegenerator")     private long id;      @manytoone     private parent parent;      public long getid() {         return id;     }      public void setid(long id) {         this.id = id;     }      public long getparent() {         return parent;     }      public void setparent(parent parent) {         this.parent = parent;     } } 

and parent class:

@entity @table(name = "parent") @cache(usage = cacheconcurrencystrategy.nonstrict_read_write) public class parent implements serializable {      private static final long serialversionuid = 1l;      @id     @generatedvalue(strategy = generationtype.sequence, generator = "sequencegenerator")     @sequencegenerator(name = "sequencegenerator")     private long id;      @onetomany(mappedby = "parent", cascade = cascadetype.all, orphanremoval = true)     @jsonignore     @cache(usage = cacheconcurrencystrategy.nonstrict_read_write)     private set<child> children = new hashset<>();      public long getid() {         return id;     }      public void setid(long id) {         this.id = id;     }      public set<child> getchildren() {         return children;     }      public void setchildren(set<child> children) {          this.children = children;     }      public parent addchild(child child) {         this.children.add(child);         child.setparent(this);         return this;     }      public parent removechild(child child) {         this.children.remove(child);         child.setparent(null);         return this;     } } 

and here test:

@test @transactional public void testparenttochildrelationship() {     parent parent = new parent();     child child = new child();      parent.addchild(child);     parent.addchild(new child());     parent.addchild(new child());     parent.addchild(new child());      parentrepository.save(parent);      assertions.assertthat(parentrepository.count()).isequalto(1l);     assertions.assertthat(childrepository.count()).isequalto(4l);      childrepository.delete(child);       assertions.assertthat(parentrepository.count()).isequalto(1l);     // fails     assertions.assertthat(childrepository.count()).isequalto(3l);      parentrepository.delete(parent.getid());      assertions.assertthat(parentrepository.count()).isequalto(0l);     assertions.assertthat(childrepository.count()).isequalto(0l); } 

the test work if insert before deleting child,

child.getparent().removechild(child); 

but want avoid calling this. there way make work calling child-jpa-repository.delete method? or other annotations missed?

since child has association parent facing issue, need remove link between child , parent either using

parent.removechild(child); 

or

child.getparent().removechild(child); 

Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -