Hallo,
ich verwende EclipseLink 2.4 und habe ein kleines Problem mit "cascade = CascadeType.ALL". Ich habe folgende Beziehung in 2 DataEntity Klassen erstellt:
OneToMany Beziehung in der Klasse DMerch
Gegenstück in Klasse DMerchStock
Zu jedem Entity DMerch existieren also X MerchStock Items. Lösche ich jetzt ein Merch Item, möchte ich dass alle zugewiesene MerchStockItems auch gelöscht werden. Dies funktioniert jedoch nur, nachdem ich den Jetty bzw. Tomcat neu starte. Was kann mein Problem sein? Die folgende Fehlermeldung erscheint:
Meine Persistence sieht wie folgt aus:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="LSF-5434" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<shared-cache-mode>NONE</shared-cache-mode>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/webAdmin"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.driver" value="org.gjt.mm.mysql.Driver"/>
<property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
<property name="javax.persistence.jdbc.password" value="xxx"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.logging.level" value="OFF"/>
<!-- property name="eclipselink.ddl-generation" value="none"/ -->
<!-- property name="eclipselink.ddl-generation" value="drop-and-create-tables"/ -->
</properties>
</persistence-unit>
</persistence>
[/XML]
ich verwende EclipseLink 2.4 und habe ein kleines Problem mit "cascade = CascadeType.ALL". Ich habe folgende Beziehung in 2 DataEntity Klassen erstellt:
OneToMany Beziehung in der Klasse DMerch
Java:
@OneToMany( cascade = CascadeType.ALL, mappedBy = "merch", fetch = FetchType.EAGER )
private List<DMerchStock> merch_items;
Gegenstück in Klasse DMerchStock
Java:
@ManyToOne( fetch = FetchType.EAGER )
@JoinColumn( name = "merch_id" )
private DMerch merch;
Zu jedem Entity DMerch existieren also X MerchStock Items. Lösche ich jetzt ein Merch Item, möchte ich dass alle zugewiesene MerchStockItems auch gelöscht werden. Dies funktioniert jedoch nur, nachdem ich den Jetty bzw. Tomcat neu starte. Was kann mein Problem sein? Die folgende Fehlermeldung erscheint:
Java:
[EL Warning]: 2012-08-06 14:38:50.895--UnitOfWork(118401910)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.BatchUpdateException: Cannot delete or update a parent row: a foreign key constraint fails (`webadmin`.`merchstock`, CONSTRAINT `FK_merchstock_merch_id` FOREIGN KEY (`merch_id`) REFERENCES `merch` (`MERCH_ID`))
Error Code: 1451
Meine Persistence sieht wie folgt aus:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="LSF-5434" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<shared-cache-mode>NONE</shared-cache-mode>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/webAdmin"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.driver" value="org.gjt.mm.mysql.Driver"/>
<property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
<property name="javax.persistence.jdbc.password" value="xxx"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.logging.level" value="OFF"/>
<!-- property name="eclipselink.ddl-generation" value="none"/ -->
<!-- property name="eclipselink.ddl-generation" value="drop-and-create-tables"/ -->
</properties>
</persistence-unit>
</persistence>
[/XML]
Zuletzt bearbeitet: