Jeg prøver å slette et objekt som har flere children, som har flere children igjen fra en database.
Parent objektet ser slik ut:
Child1:
Child2:
Når jeg prøver å bruke em.remove(parent) i en dao, så får jeg følgende feilmelding:
Ut ifra hva jeg kan forstå av feilmeldingen, så er parent objektet/referansen i Child1 slettet. Skal ikke barnene slettet før parent med em.remove()? Noen som har en anelse hva jeg gjør feil, eller kan gi meg en dytt i riktig retning?
Har brukt timesvis på å prøve å finne ut av denne feilmeldingen, men finner nesten ingen som har samme feilmelding, og har mener jeg har gjort nesten nøyaktig det samme folk anbefaler for å slette objekter med children på nettet.
Hadde satt stor pris på litt hjelp!
Parent objektet ser slik ut:
Kode
@Entity @Table(schema = "schema", name = "parent") public class Parent implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval=true) private List<Child1> child1;
Kode
@Entity @Table(schema="schema", name="child1") public class Child1 implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; @OneToMany(mappedBy="child1", cascade=CascadeType.ALL, orphanRemoval=true) private List<Child2> child2; @ManyToOne(cascade=CascadeType.REMOVE) @JoinColumn(name="parent", referencedColumnName="id", nullable=false) private Parent parent;
Kode
@Entity @Table(schema="schema", name="child2") public class Child2 implements Comparable<Child2>{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; @ManyToOne(cascade=CascadeType.REMOVE) @JoinColumn(name="child1", referencedColumnName="id", nullable=false) private Child1 child1;
Kode
<openjpa-2.4.0-r422266:1674604 fatal store error> org.apache.openjpa.persistence.RollbackException: Encountered deleted object "org.apache.openjpa.enhance.entity$Parent$pcsubclass-58" in persistent field "entity.Child1.parent" of managed object "org.apache.openjpa.enhance.entity$Child1$pcsubclass-68" during flush. FailedObject: org.apache.openjpa.enhance.entity$Parent$pcsubclass@466e43eb at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:593) at DAO.DAO.deleteParent(DAO.java:172) at controller.ServletList.doPost(ServletList.java:63) at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source)
Har brukt timesvis på å prøve å finne ut av denne feilmeldingen, men finner nesten ingen som har samme feilmelding, og har mener jeg har gjort nesten nøyaktig det samme folk anbefaler for å slette objekter med children på nettet.
Hadde satt stor pris på litt hjelp!