JPA / Hibernate remove entity funktioniert manchmal nicht

Ich habe den folgenden code, der funktioniert normalerweise auch:

public void delete(T object)
{
  EntityManager em = getPersistence().createEntityManager();
  EntityTransaction et = em.getTransaction();
  try
  {
    et.begin();
    object = em.find(object.getClass(), object.getId());
    em.remove(object);
    em.flush();
    et.commit();
  }
  catch(Exception e)
  {
    error("Unable to delete " + object.toString() + ": there are references to it.");
  }
  finally
  {
    if (et.isActive()) et.rollback();
    em.close();
  }
}

Für viele meiner entity-Klassen das funktioniert. Doch für zwei von Ihnen bedeutet es nichts, es löst keine Ausnahmen aus, und es löscht nicht das Objekt. Das Protokoll aus dem Ruhezustand zeigt, dass hibernate führt eine Reihe von select-Abfragen sind, aber es gar nicht versuchen, auszuführen, zu löschen.

Hab ich schon versucht, Anregungen in anderen ähnlichen Fragen hier und hier, aber ohne Erfolg (gut, letzteres schlägt @Transactional die ich nicht verwenden kann, aber ich eingeschlossen, werden die Anweisungen zwischen begin() und commit() statt).

Ich kann nicht scheinen zu finden, was diese beiden Klassen haben mehr (oder weniger) als die anderen. Sie verwenden @PrimaryKeyJoinColumn genau wie fast alle anderen Elemente, die ich habe, haben Sie @OneToMany und @ManyToOne wie ohters. Um ehrlich zu sein, Sie haben eine @OneToOne(optional = false) Feld verweist auf eine andere Klasse ist und dass andere Personen nicht haben, aber ich würde nicht gehen durch den Aufwand der änderung, dass (und folglich ändern des Datenbank-Schemas), es sei denn, Sie sagen mir, es könnte einen Grund dafür.

Ist @OneToOne verantwortlich? Oder ist mein code löschen verbuggt?

Kommentar zu dem Problem
Haben Sie versucht, fügen Sie einige Kaskade.ALLE und ein orphanRemoval= true ? Kommentarautor: willome
@willome: es war genau das umgekehrte problem, ich hatte "zu viel" cascading im Ort, sehen, Steve Ebersole ' s Antwort weiter unten. Kommentarautor: Lucio Crusca

InformationsquelleAutor der Frage Lucio Crusca | 2013-06-03

Schreibe einen Kommentar