2017-02-20 2 views
2

Derzeit verwende ich Spring 4.0.6 mit Postgresql 9.5. Ich rufe eine serviceClass1 an einen anderen serviceClass2 und bekommen eine Ausnahme für eine Transaktion wie folgt:Spring und Postgres transaction Fehler

serviceClass1.class

`@Transactional(readOnly = false, propagation = Propagation.REQUIRED,rollbackFor= { Throwable.class }) 
public Map<String, Object> storeUsersList(Map<String, Object> mapOfParams) throws Exception { 
    Map<String, Object> returnMap = new HashMap<String, Object>(); 
if (userListToStore != null && !userListToStore.isEmpty()) {     
integrationService.manangePassCodes(org,userListToStore.size()); 
       for (Users singleUser : userListToStore) { 
        try { 
         getEm().update(singleUser);` 

serviceClass2.class

@Override 
@Transactional(readOnly=false,propagation=Propagation.REQUIRED 
    ,rollbackFor{Throwable.class}) 
public void manangePassCodes(Organizations org,int userToRegisterCount)throws Exception{ 
//some Logic 

hier bin ich immer Ausnahme an dieser Stelle - getEm().update(singleUser);

Ausnahme SQL-Status [25P02]; Fehlercode [0]; extrahieren konnte nicht ResultSet

ich gerade über diesen Fehler zu Postgres Transaktion gelesen haben, aber nicht in der Lage zu bekommen, was soll ich für Hibernate verwenden.

Antwort

1

Vielen Dank für die schnelle Hilfe, und ich habe mein Problem gelöst habe Ich habe viele Transaktionen von einer einzigen Transaktion aufgerufen und es bedeutet in meinem Fall, dass aufgrund der vorherigen Transaktion Fehler als nächstes abgebrochen wurde, weil es die Schreibsperre für die DB hatte. und Ihre aktuelle Transaktion wird erst gespeichert, nachdem Sie die vorherige Transaktion aussortiert haben. Vorherige Transaktion, die einen dummen Fehler hattegetEm().update(singleUser); Aktuelle Transaktion, die nichts falschintegrationService.manangePassCodes(org,userListToStore.size‌()); Stück Code hat Da sowohl zu verschiedenen Diensten gehört, aber, und ich habe mit Anmerkungen versehen mit @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = { Throwable.class }) Ausbreitung = Propagation.REQUIRED bedeutet, dass es eine aktuelle Transaktion unterstützen wird, einen neuen erstellen, wenn keine vorhanden . So gab es mir Fehler 25P02 - Transaktion abgebrochen.

Referenz-Link 1-postgresql.org/message-id/[email protected]

Referenz-Link 2-postgresql.org/docs/9.4/static/errcodes-appendix.htm

Referenz-Link 3-https://www.postgresql.org/message-id/8829.1173816732%40sss.pgh.pa.us

1

Nicht 100% sicher, wenn das der Fall ist, aber in Ihrer storeUsersList-Methode scheinen Sie die bereits vorhandene Benutzersammlung wiederzuverwenden, die in einer Instanzvariablen userListToStore gespeichert ist.

Diese Benutzergruppe wird nicht innerhalb der Transaktion initialisiert, sodass die Entitäten höchstwahrscheinlich getrennt werden, da Sie Container-verwaltete Transaktionen verwenden.

Meiner Meinung nach sollten Sie jede der Einheiten zusammenführen, bevor Sie das Update durchführen, so dass die Persistenzkontext kennt sie:

for (Users singleUser : userListToStore) { 
     try { 
     getEm().merge(singleUser); 
     getEm().update(singleUser); 
+0

Dank, aber ich habe mein Problem gelöst, indem mehr und Lesen zu dieser Fehlermeldung Inspektion und ich festgestellt, dass Speichern Fehler ist nicht bei der 'getEm(). update (singleUser); ' – ThinkTank

+0

Sorry für vorhandene Kommentar. Danke, aber ich habe mein Problem gelöst, indem ich mehr über diese Fehlermeldung gelesen und gelesen habe. und es bedeutet, dass die vorherige Transaktion als nächstes abgebrochen wird, kann nicht fortgesetzt werden, dass der Speicherfehler nicht bei der 'getEm(). Update (singleUser);' ist, während es bei 'integrationService.manangePassCodes (org, userListToStore.Größe()); Stück Code Referenz Link 1 - https://www.postgresql.org/message-id/[email protected] Referenz Link 2 - https: //www.postgresql .org/docs/9.4/statisch/errcodes-appendix.html – ThinkTank

Verwandte Themen