Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  0 1012
Jeg prøver å slette et objekt som har flere children, som har flere children igjen fra en database.

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;
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;
Child2:

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;
Når jeg prøver å bruke em.remove(parent) i en dao, så får jeg følgende feilmelding:

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)
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!