cascade funzt nicht

Status
Nicht offen für weitere Antworten.

Angel4585

Bekanntes Mitglied
Hallo,

ich hab einige Tabellen mit 1:n beziehungen.
Dabei jeweils
@OneToMany(cascade={CascadeType.ALL},mappedBy = "world")
stehen, bzw mappedBy eben das feld.

Aber wenn ich jetzt miene "World" lösche, tut sich bei den Countries die eben damit verknüpft sind garnichts.
Sollten die dann nciht automatisch auch gelöscht werden?

Ich bin noch ziemlicher Anfänger was jpa angeht. Kann mir vllt jemand kurz sagen wo ich was genau hinschrieben muss um Tabellen richtig zu kaskadieren?
MOmentan habe ich überall wo OneToMany, ManyToOne usw steht ein cascade={CascadeType.ALL} mit drin.
 

byte

Top Contributor
Sicher dass das Mapping stimmt? Da Du mappedBy benutzt, handelt es sich offenbar um eine bidirektionale Assoziation und das Mapping muss entsprechend auf der "anderen Seite" definiert sein (dort gehört auch das Cascade.ALL hin).

Beispiel:

Code:
@Entity
public class Customer implements Serializable {
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="passport_fk")
    public Passport getPassport() {
        ...
    }

@Entity
public class Passport implements Serializable {
    @OneToOne(mappedBy = "passport")
    public Customer getOwner() {
    ...
}
 

Angel4585

Bekanntes Mitglied
Code:
    @OneToMany(cascade={CascadeType.ALL},mappedBy = "world")
    public Collection<Country> getCountries() {
        return countries;
    }

    @ManyToOne(cascade={CascadeType.ALL})
    public World getWorld() {
        return world;
    }

steht bei mir momentan.

Wann muss ich genau dieses mappedBy rein machen? Ist es egal auf welcher Seite das steht?
Das cascade mach ich jetz mal überall wo ein mappedBy steht raus.
 

Angel4585

Bekanntes Mitglied
Was ich im endeffekt haben will:

Ich habe verschiedene Welten mit jeweils mehreren Ländern, die wiederum mehrere Städte haben.

Jetzt möchte ich einfach eine Welt löschen und es sollen sich automatisch alle dazugehörigen Länder und Städte mitlöschen.
 

Angel4585

Bekanntes Mitglied
mir fällt grad auf dass zB das on delete cascade bei mysql garnicht eingetragen wird?? Macht das die Software dann von sich aus?
 

Angel4585

Bekanntes Mitglied
Code:
    @OneToMany(mappedBy = "world")
    public Collection<Country> getCountries() {
        return countries;
    }

    @ManyToOne(cascade={CascadeType.ALL})
    public World getWorld() {
        return world;
    }

So sollte das doch gehen oder?
Tut leider nicht. Bekomm folgende Meldung:

javax.persistence.RollbackException: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`srpg/country`, CONSTRAINT `FK_COUNTRY_WORLD_ID` FOREIGN KEY (`WORLD_ID`) REFERENCES `world` (`ID`))
Error Code: 1451
Call: DELETE FROM WORLD WHERE (ID = ?)
bind => [1]
Query: DeleteObjectQuery(jpatest.World[id=1])
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:120)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:60)
at main.EntManager.clearDB(EntManager.java:49)
at main.EntManager.<init>(EntManager.java:35)
at main.Main.main(Main.java:22)
Caused by: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`srpg/country`, CONSTRAINT `FK_COUNTRY_WORLD_ID` FOREIGN KEY (`WORLD_ID`) REFERENCES `world` (`ID`))
Error Code: 1451
Call: DELETE FROM WORLD WHERE (ID = ?)
bind => [1]
Query: DeleteObjectQuery(jpatest.World[id=1])
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:311)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:654)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:703)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:492)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:452)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeCall(AbstractSession.java:690)
at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:214)
at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.deleteObject(DatasourceCallQueryMechanism.java:205)
at oracle.toplink.essentials.internal.queryframework.StatementQueryMechanism.deleteObject(StatementQueryMechanism.java:130)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.deleteObjectForWrite(DatabaseQueryMechanism.java:258)
at oracle.toplink.essentials.queryframework.DeleteObjectQuery.executeCommit(DeleteObjectQuery.java:98)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.executeWrite(DatabaseQueryMechanism.java:335)
at oracle.toplink.essentials.queryframework.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:111)
at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:628)
at oracle.toplink.essentials.queryframework.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:555)
at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:138)
at oracle.toplink.essentials.queryframework.DeleteObjectQuery.executeInUnitOfWorkObjectLevelModifyQuery(DeleteObjectQuery.java:125)
at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:110)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2233)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:952)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:909)
at oracle.toplink.essentials.internal.sessions.CommitManager.deleteAllObjects(CommitManager.java:338)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1047)
at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:403)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1126)
at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:107)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:856)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:102)
... 4 more
Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`srpg/country`, CONSTRAINT `FK_COUNTRY_WORLD_ID` FOREIGN KEY (`WORLD_ID`) REFERENCES `world` (`ID`))
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1585)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1500)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1485)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:647)
... 31 more
 

byte

Top Contributor
also du musst ihm schon sagen, wie das mapping genau aussieht, also z.b. eine join column angeben. wie genau du das machen musst kann man dir nicht sagen, solange man nix über deine tabellenstrukturen weiss.
 
M

maki

Gast
Der Loggingausgabe nach, versuchst du eine Entity(Datensatz) zu löschen, der von einer anderen Entity(Tabelle) referenziert wird und diese Referenz darf nicht null sein.

Genauer gesagt muss country eine Referenz auf World haben (not nul), wenn du eine World löschen möchtest die von einer Country referenziert wird, bekommst du einen Fehler.
 

Angel4585

Bekanntes Mitglied
ok byto. es geht mehr um das prinzipielle, nicht wie es in meinem speziellen Fall ist.

Also ich hab zwei Tabellen:

Tabelle1

id integer
name varchar

Tabelle2

id integer
tab1id integer
name varchar

In Tabelle 2 habe ich x Einträge die bei tab1id zB die "1" drin haben. Wenn ich jetzt in Tabelle1 den Eintrag mit der id "1" lösche, sollen in Tabelle2 auch alle Einträge mit der tab1id "1" gelöscht werden.

Was machen diese JoinColumns eigentlich genau?
Im phpMyAdmin seh ich keinen Unterschied.
Bisher hab ich die weggelassen, kann aber mit denen auch keinen Unterschied feststellen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JSP funzt in Tomcat, Servlets nicht Allgemeines EE 5
thor_norsk Glassfish Server unter Windows startet nicht! Allgemeines EE 20
pkm Root resource - Klassen werden nicht gefunden. Allgemeines EE 2
M doGet()-Methode wird nicht geladen Allgemeines EE 3
Dimax Servlet läuft in Eclipse, aber nicht im Browser Allgemeines EE 74
J Ich kann Java JDK nicht downloaden Allgemeines EE 6
G Unit Test einer JavaEE Anwendung schlägt fehl. JNDI Name nicht gefunden. Allgemeines EE 3
C Servlet Tomcat/Jersey findet REST-Service nicht Allgemeines EE 3
I XML mit JAXB und Annotations aufbauen klappt nicht wie gewollt Allgemeines EE 5
B Datenbank Resource wird nicht gefunden Allgemeines EE 1
M JSF Binding greift nicht Allgemeines EE 0
OnDemand JSF Stacktrace wird nicht korrekt ausgegeben Allgemeines EE 1
D Remote Aufruf von EJB funktioniert nicht Allgemeines EE 1
D Websocket nach Decoder Annotation nicht mehr erreichbar Allgemeines EE 0
S JEE installation geht nicht? Allgemeines EE 6
D Einfaches Java Projekt funktioniert nicht Allgemeines EE 3
J Mit @Schedule annotierte Methode wird nach einer Weile nicht mehr ausgeführt (JBoss AS 7.2) Allgemeines EE 0
U @Inject funktioniert nicht Allgemeines EE 3
T wie static aber doch nicht ... Allgemeines EE 8
C Double Eingabe Felder sind nicht Leer Allgemeines EE 1
F SessionScoped und Stateful EJB: Werte werden nicht behalten Allgemeines EE 3
L JSF Primefaces breadcrumb - erstes Element funktioniert nicht Allgemeines EE 0
D Jboss löscht Archiv nicht beim Redeployed Allgemeines EE 3
M Konzeptfrage: Applicationserver, oder nicht? Allgemeines EE 4
E CDI mit verschiedenen Jars in EAR klappt auf Jboss AS 7.1.1.Final nicht Allgemeines EE 8
M Daten aus der Resource werden nicht übernommen Allgemeines EE 4
R MavenDependencyResolver nicht auflösbar Allgemeines EE 5
D [Glassfish EJB] OneToMany geht nicht Allgemeines EE 7
G JSF Beans nicht angezeigt Allgemeines EE 2
S JSF und CSS: background:url() geht nicht Allgemeines EE 2
S Eclipse: Teilmodule beim Testen werden nicht gestartet Allgemeines EE 2
H Bean läuft unter GlassFish, aber JBoss nicht Allgemeines EE 5
aze Tomcat:Error Pages werden nicht angezeigt Allgemeines EE 4
M JSP Ausgabe funktioniert nicht Allgemeines EE 4
F Webanwendung startet nicht richtig Allgemeines EE 6
J JBoss, Eclipse, Webseite wird nicht angezeigt? Allgemeines EE 4
B Tomcat6/axis1.4 kann nicht auf Dateien zugreifen Allgemeines EE 3
P Displaytag findet getter-Methode(n) nicht! Allgemeines EE 3
N Tomcat funktioniert nach shutdown/startup nicht mehr korrekt Allgemeines EE 9
Y JSF EJB wird nicht injected Allgemeines EE 18
F REST-Service: GET erkennt Veränderungen an der DB nicht. Allgemeines EE 2
T Applet mit XmlRpc läuft lokal nicht vollständig Allgemeines EE 4
S m2eclips + strust2 == geht nicht Allgemeines EE 5
C TransferObjects's in EJB 3 klappt nicht Allgemeines EE 2
P Kriege JAAS einfach nicht zum Laufen Allgemeines EE 3
A Servlet erkennt request Objekt nicht Allgemeines EE 8
A Java Tomcat findet Website nicht Allgemeines EE 8
D JSF-Tags können nicht aufgelöst werden ? Allgemeines EE 2
D Debug Modus im Glassfish 2.1 plötzlich nicht mehr möglich Allgemeines EE 2
J Einige Klassen werden nicht resolved Allgemeines EE 7
P Eclipse Tomcat Plugin funktioniert nicht mit externem TC-Server? Allgemeines EE 4
P Prozess wird nicht beendet Allgemeines EE 4
B HttpSession bekommen wenn nicht in Servlet Allgemeines EE 8
J Dinge, die man nicht tun sollte Allgemeines EE 6
I Klassen werden nicht für Import erkannt eclipse EE Allgemeines EE 2
S In Eclipse werden die "Servlet-Klassen" nicht gefu Allgemeines EE 2
T web-app läuft nicht Allgemeines EE 5
D ArrayList behält Werte nicht Allgemeines EE 2
D musicplayer spielt mit threads nicht mehr ab Allgemeines EE 3
0 myfaces staret nicht Allgemeines EE 1
A Warum werden die Managed Beans nicht erkannt? Allgemeines EE 3
A Tomcat startet nicht, Einstellungsfehler? Allgemeines EE 3
S MyFaces Sandbox: inputSuggest Komponente furnktioniet nicht Allgemeines EE 11
K JSF Test Anwendung ausführen funktioniert nicht Allgemeines EE 7
B Faces Context nicht gefunden Allgemeines EE 4
M JSF Bilder werden wegen jsessionid nicht gefunden (nur IE) Allgemeines EE 6
K Download Dialog startet nicht Allgemeines EE 2
M Servlet lässt sich nicht aufrufen Allgemeines EE 6
D warum ist gwt nicht beliebt ? Allgemeines EE 2
I Tomahawk funktioniert nicht Allgemeines EE 3
A action-Methode wird nicht aufgerufen Allgemeines EE 7
M taglib wird nicht gefunden Allgemeines EE 9
N JSF + Facelets: Datatable wird nicht angezeigt Allgemeines EE 1
G EJB - EJB wird nicht ins Servlet geladen Allgemeines EE 3
M Resourcen werden in JSP nicht gefunden Allgemeines EE 12
S Verdammt, MyFaces Sandbox 'läuft' nicht Allgemeines EE 7
T Ich raff es nicht . NotSerializableException Allgemeines EE 5
M Servlets | work - Klassen nicht im WAR File Allgemeines EE 5
E HTTP-GET// -->Eine URL aufrufen, aber nicht dahin navigie Allgemeines EE 2
P JSF Seite wird nicht gestartet Allgemeines EE 4
J Direktaufruf einer jsp nicht zulassen Allgemeines EE 2
C WAS findet Jars in EAR nicht? Allgemeines EE 2
L Servlet kann Funktion nicht aufrufen Allgemeines EE 3
B Parameterübergane von Servlet an JSP funktioniert nicht ? Allgemeines EE 2
I JSP - Sinnvoll oder nicht? Allgemeines EE 5
S JSF: Bei Navigation Bilder / Styles nicht mehr verfügbar Allgemeines EE 1
F webanwendung läuft nicht auf Tomcat Allgemeines EE 2
S JBoss gibt POI API nicht frei Allgemeines EE 8
B FileInputStream(sPath); file wird nicht gefunden Allgemeines EE 5
F MyFaces und Tiles: <tiles:insert> wird nicht erkannt Allgemeines EE 10
N JSP kann Servlet nicht aufrufen! :-( Allgemeines EE 2
S Löschen einer Entity kaskadiert nicht auf Collection (1:n) Allgemeines EE 2
S kann eigenes object nicht von applet zu servlet senden Allgemeines EE 3
P Relationship stimmt irgendwo nicht Allgemeines EE 2
A HttpUnit: Form wird nicht submitted Allgemeines EE 4
M Attribute setzen/lesen zwischen JSP & Servlet nicht mögl Allgemeines EE 4
K Dateipfad in Fehlermeldung nicht nachvollziehbar Allgemeines EE 3
G Tomcat will einfach nicht starten Allgemeines EE 6
D Frage SSL und nicht SSL Allgemeines EE 3
D Bekomme DAten von einen Jsp nicht in den Tag Handler Allgemeines EE 2

Ähnliche Java Themen

Neue Themen


Oben