JPA kann Objekt nicht löschen

Diskutiere JPA kann Objekt nicht löschen im Data Tier Forum; Hi, ich sitze nun seit diversen Stunden an einem Problem und weiß mir nicht mehr zu helfen. Ich habe noch nicht viel Erfahrung mit JPA, aber bin...

  1. Goldfish
    Goldfish Mitglied
    Hi, ich sitze nun seit diversen Stunden an einem Problem und weiß mir nicht mehr zu helfen. Ich habe noch nicht viel Erfahrung mit JPA, aber bin erstmals drauf umgestiegen, da es ja eigentlich Arbeit abnehmen sollte.. dabei wäre ich ohne vermutlich schon fertig -_-
    Naja, ich habe eine sehr einfache Struktur, in der ich eine Entity persistiere, die mit ihrer Persistierung ein weiteres Objekt in einer anderen Tabelle speichert. Also CascadeType.PERSIST. Wenn ich das Objekt später wieder löschen will, klappt es nicht, wegen folgender Fehlermeldung:

    Code (Text):

    java.lang.RuntimeException: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement
        at de.gold.database.DatabaseManager.deleteEntityObject(DatabaseManager.java:71)
        at de.gold.database.DatabaseManagerTest._2_persistAdder(DatabaseManagerTest.java:97)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
        at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
        at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
        at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
    Caused by: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1338)
        at de.gold.database.DatabaseManager.deleteEntityObject(DatabaseManager.java:67)
        ... 28 more
    Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement
        at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:72)
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
        at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:211)
        at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:62)
        at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3400)
        at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3630)
        at org.hibernate.action.internal.EntityDeleteAction.execute(EntityDeleteAction.java:114)
        at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:465)
        at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:351)
        at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
        at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
        at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258)
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1335)
        ... 29 more
    Caused by: java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: foreign key no action; FK_3UNEX2ESC8THC4VPSXFJTW1M0 table: STRINGFIX_ADDER
        at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
        at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
        at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
        at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
        at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
        ... 39 more
    Caused by: org.hsqldb.HsqlException: integrity constraint violation: foreign key no action; FK_3UNEX2ESC8THC4VPSXFJTW1M0 table: STRINGFIX_ADDER
        at org.hsqldb.error.Error.error(Unknown Source)
        at org.hsqldb.StatementDML.performReferentialActions(Unknown Source)
        at org.hsqldb.StatementDML.delete(Unknown Source)
        at org.hsqldb.StatementDML.executeDeleteStatement(Unknown Source)
        at org.hsqldb.StatementDML.getResult(Unknown Source)
        at org.hsqldb.StatementDMQL.execute(Unknown Source)
        at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
        at org.hsqldb.Session.execute(Unknown Source)
        ... 42 more
     
    Meine Entities sind wie folgt definiert:

    Code (Text):

    @Entity
    public class StringFix {

        @Id
        private String hashcode;
        @NotNull
        private String match;
        private boolean isRegex;
        private boolean toUpper;
        private boolean toLower;
        ...
     
    Code (Text):

    @Entity
    public class Adder {

        @Id
        private String hashcode;

        @NotNull
        @OneToOne(orphanRemoval = true,  cascade = {CascadeType.MERGE, CascadeType.PERSIST})
        @JoinTable(
                name="STRINGFIX_ADDER",
                joinColumns=
                @JoinColumn(name="STRINGFIX_HASH", referencedColumnName="HASHCODE", nullable = false, updatable = false),
                inverseJoinColumns=
                @JoinColumn(name="ADDER_HASH", referencedColumnName="HASHCODE", nullable = false, updatable = false))
        private StringFix regexMatch;
        @NotNull
        private String prefix;
        @NotNull
        private String suffix;

        @Transient
        private Pattern pattern;
        @Transient
        private String lastRegexMatch;
        @Transient
        private String runBy;
        @Transient
        private String ignored;
     
    EDIT:

    Hier noch meine Delete-Methode:

    Code (Text):

    public <T> void deleteEntityObject(T entityObject) {
            EntityManager em = factory.createEntityManager();
            try {
                em.getTransaction().begin();
                Object entity = em.find(entityObject.getClass(), String.valueOf(entityObject.hashCode()));
                em.remove(entity);
                em.flush();
                em.getTransaction().commit();
            } catch (Throwable throwable) {
                em.getTransaction().rollback();
                throw new RuntimeException(throwable);
            } finally {
                em.close();
            }
        }
     
     
    Zuletzt bearbeitet: 21. Juni 2015
  2. Vielleicht hilft dir dieser Kurs hier weiter --> (hier klicken)
  3. Goldfish
    Goldfish Mitglied
    Zuletzt bearbeitet: 22. Juni 2015
  4. stg
    stg Bekanntes Mitglied
    Du versuchst offenbar einen Eintrag aus der DB zu löschen, auf den von anderer Seite noch ein ForeignKey verweist.
     
  5. Goldfish
    Goldfish Mitglied
    ja tue ich. Aber was genau muss ich tun, damit er diesen einfach mit in die Tonne wirft? der Eintrag aus der Mapping-Tabelle soll ebenfalls gelöscht werden. Ich habs auch schon mit CascadeType.ALL versucht, aber das hilft auch nicht...
     
  6. Goldfish
    Goldfish Mitglied
    Hab wohl gerade die Lösung gefunden. Das was ich vorhabe, ist so nicht zu machen, nach folgendem Beitrag von StackOverflow
    java - Deleting JPA object fails due to foreign key constraints? - Stack Overflow
    Ich muss die entsprechende delete-Operation wohl selbst schreiben. Jetzt wo ich weiß, dass es wohl keinen anderen Weg gibt, ist das Problem wohl gelöst. Hatte die ganze Zeit angenommen, es würde einen sauberen Weg geben, der mir die Arbeit abnimmt.
     
Die Seite wird geladen...

JPA kann Objekt nicht löschen - Ähnliche Themen

Wie kann man ein Objekt kopieren?
Wie kann man ein Objekt kopieren? im Forum Java Basics - Anfänger-Themen
Wie kann ich einen Objekt zu Instanzvariable speichern ?
Wie kann ich einen Objekt zu Instanzvariable speichern ? im Forum Java Basics - Anfänger-Themen
Kann man Objekte in den ContentHandler übergeben?
Kann man Objekte in den ContentHandler übergeben? im Forum XML und Co.
Kann der Typ eines Objekts ausgegeben werden?
Kann der Typ eines Objekts ausgegeben werden? im Forum Java Basics - Anfänger-Themen
(wie) kann man eine 'super'-Methode auf ein Objekt anwenden ?
(wie) kann man eine 'super'-Methode auf ein Objekt anwenden ? im Forum Java Basics - Anfänger-Themen
Thema: JPA kann Objekt nicht löschen