2016-08-03 34 views
0

meine App besteht aus Feder @transaction mit Ruhezustand. Ich versuche, Hibernate Interceptor zu verwenden. i registriert die Abfangjäger alsDatensatz nicht nach Interceptor eingefügt onSave()

getHibernateTemplate().getSessionFactory().withOptions().interceptor(interceptor).openSession(); 

das eigentliche Interceptor erstreckt EmptyInterceptor und ich bin übergeordnete onSave() -Methode.

Das Problem ist, dass die Interceptor onSave() -Methode aufgerufen wird, aber danach wird die tatsächliche Entität nicht in die Datenbank eingefügt.

public boolean onSave(Object entity, Serializable id, Object[] state, 
     String[] propertyNames, Type[] types) { 
    System.out.println("inside interceptor - on save"); 
    { 
     // my changes here . setting a field of the entity. 

     return true; 
    } 
    return false; 
} 

Antwort

0

Nach Interceptor.onSave():

aufgerufen, bevor ein Objekt gespeichert. Der Interzeptor kann den Zustand ändern, der für das SQL-INSERT verwendet und an das persistente Objekt weitergegeben wird.

So werden die Änderungen an dem persistenten Objekt begangen und die INSERT Aussage, dass Hibernate in die Datenbank ausgeben.

Sie möchten sicherstellen, dass Sie nach dem Datensatz suchen, sobald die @Transactional-Methode beendet ist, wenn Sie die Datenbank mit einer anderen Sitzung abfragen als der, die die Transaktion geöffnet hat. Das ist, wenn Spring die Transaktion in die Datenbank schreibt.

Sie könnten auch versuchen, Interceptor.afterTransactionCompletion() zu verwenden, um zu überprüfen, ob der Datensatz effektiv eingefügt wird.

Wird aufgerufen, nachdem eine Transaktion festgeschrieben oder zurückgesetzt wurde.

+0

danke, Ja, ich ändere den Zustand des persistenten Objekts, aber die Einfüge-Abfrage wird nie ausgelöst, auch nachdem die Transaktion abgeschlossen ist – shiva