2016-03-26 6 views
2

Ich muss Tausende von Entitäten aktualisieren und die Logik kann nicht in eine SQL-Anweisung gesetzt werden. Wenn nicht verwalteten JPA mit den Mustern, das ich verwenden sind:openJPA Batch-Update-Muster

long commitThreshold = 100; // or other appropriate value 
try { 
    em.beginTransction().begin(); 
    for(list of entities to be modified) { 
     // retrieve current Entity 
     // modify current Entity 

     if((++modifiedEntityCount % commitThreshold) == 0) { 
     em.getTransaction().commit(); 
     em.getTransaction().begin(); 
     } 
    } 
    if(em.getTransaction().isActive()) { 
     em.getTransaction().commit(); 
    } 
catch() { 
} 
finally { 
    // cleanup 
} 

In einer verwalteten Umgebung führt dies zu einem

java.lang.IllegalStateException: Transaction management is not available for container managed EntityManagers. 

Was für diese Art der Verwendung Falles ein gutes Muster ist, wenn Container verwalten Transaktionen und Blaupause? Meine spezifische Umgebung ist karaf 3.0.5 und openJPA 2.3.x, wenn es darauf ankommt.

Antwort

Verwandte Themen