2016-06-04 10 views
0

im Arbeits versuchen, diese Methode zu testen, eine Einheit aus der h2-Datenbank zu entfernen:h2 JPA löschen Methode nicht java

public boolean delete(T entity) { 
    if (entity == null) { 
     throw new IllegalArgumentException(); 
    } 

    boolean ret = true; 

    EntityManager em = entityManager(); 

    try { 
     EntityTransaction tx = em.getTransaction(); 
     tx.begin(); 
     em.remove(em.merge(entity)); 
     tx.commit(); 
    } catch (RollbackException ex) { 
     ret = false; 
    } finally { 
     em.close(); 
    } 

    return ret; 
} 

die Methode true zurückgibt, wenn das Unternehmen in der Datenbank und entfernt, aber es gibt auch true zurück, wenn das angegebene Objekt nicht in der Datenbank ist. Kann mir jemand erklären warum? Danke.

+0

Würde eine nicht vorhandene Einheit verursacht eine Ausnahme zu entfernen? – MadProgrammer

+0

das ist was ich versuche zu tun, aber weiß nicht, ob es wirklich funktioniert –

Antwort

2

merge wird eine Entität beibehalten, wenn sie nicht bereits existiert. Sie erstellen also eine Entität (mit merge) und löschen sie dann sofort (mit remove). Daher wird keine Ausnahme ausgelöst.

Wenn Sie eine Einheit und gibt einen boolean zu entfernen, ob Sie es entfernt oder nicht, dann könnten Sie tun ...

public boolean delete(T entity) { 

    if (entity == null) { 
     throw new IllegalArgumentException(); 
    } 

    EntityManager em = entityManager(); 
    EntityTransaction tx = em.getTransaction(); 

    try { 
     tx.begin(); 
     em.refresh(entity); 
     em.remove(entity); 
     tx.commit(); 
     return true; 
    } catch (EntityNotFoundException ex) { 
     tx.rollback(); 
     return false; 
    } catch (RuntimeException ex) { 
     tx.rollback(); 
     throw ex; 
    } finally { 
     em.close(); 
    } 

} 
+0

also wie soll ich es tun? Becouse Ich löschte die Zusammenführung, aber es ist immer noch die gleichen –

+0

Hinzugefügt ein Beispiel – Pace

+0

Refresh-Methode wirft EntityNotFoundException oder Sie können überprüfen, ob die Entität in db von Find-Methode beendet. Find gibt null zurück, wenn die Entität nicht existiert. –