Änderungen in try-catch in @ Transactional @ festschreib

Consider Ich habe eine Methode, die einiges erledigt und Mechanismen zur Protokollierung im ActiveRecord-Musterstil verwendet:

@Transactional
public void doSmt() {
    try {
        someOperation(); // can throw exception
        Logger.logIntoDb(); // if everything is OK
    } catch {Exception e} {
        Logger.logIntoDbWithException(e.getMessage()); // log error into db

        throw new MyCustomException(e);
    }
}

public static void logIntoDbWithException(String message) {
    final LogEntry logEntry = new LogEntry();
    logEntry.setDate(new Date());
    logEntry.setMessage(message);
    logEntry.persist();
}

Ich möchte eine Fehlermeldung im Fehlerfall beibehalten, aber wenn ich eine Ausnahme in der Catch-Klausel-Transaktion erneut auslösen würde, wird ein Rollback ausgeführt und mein LogEntry wird nicht beibehalten. Die einzige Möglichkeit, die ich sehe, ist das manuelle Anrufen vonflush() nachpersist().

Gibt es eine sauberere Lösung, um dies durchzuführen?

Vielen Dank

UPD:

Da ich über eine statische Methode verfüge, die dauerhaft funktioniert, muss ich folgenden Hack auf die akzeptierte Antwort anwenden:

public static void logIntoDbWithException(String message) {
    new Runnable() {
        @Transactional(propagation = Propagation.REQUIRES_NEW)
        public void run() {
            final LogEntry logEntry = new LogEntry();
            logEntry.setDate(new Date());
            logEntry.setMessage(message);
            logEntry.persist();
        }
    }.run();
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage