Ich habe Methode, wo ich versuche, eine Entität zu ändern, auch in dieser Methode möchte ich Transaktionsinformationen speichern. Wenn eine Ausnahme aufgetreten ist, möchte ich die Sicherungseinheit zurücksetzen, möchte aber dennoch die Transaktion speichern. Also, wie ein Repository für Entität Transaktions aber Repository für Transaktionen nicht zu machen?Wie mache ich ein JPA-Repository Transaktional aber nicht ein anderes?
Es Code aus dem Repository
@Override
@Transactional(noRollbackFor=NotEnoughAmountInAccountException.class)
<T extends Transaction> T save(T transaction);
aber es hilft nicht. Speichern der Transaktion im letzten Block.
UPDATE
Ich löste es durch AOP verwenden. Ich erstelle das Transaktionsobjekt in der Aspektberatung und speichere es hier aus der JPA-Transaktion.
Bitte stellen Sie eine Frage, zeigen Sie uns Ausnahmen verfolgen ... –
Ich habe Frage hinzugefügt. Es gibt keinen Stack-Trace, nur die Transaktion wird aufgrund eines Rollbacks nicht gespeichert. – VDanyliuk
Sie können Repository-Klassen unverändert lassen und Servicemethoden mit unterschiedlichen Transaktionsverhalten verwenden, sodass beim Aufrufen der Methode andere Servicemethoden mit anderem Transaktionsverhalten aufgerufen werden (z. B. Propagation.REQUIRES_NEW). Auf diese Weise können Sie "transaction" speichern und im Falle einer ungeprüften Ausnahme oder mit der Ausnahme "NotEnoughAmountInAccountException" kann die äußere Transaktion zurückgesetzt werden, aber die innere Transaktion mit neuem Verhalten wird weiterhin ausgeführt. – Bunti