openJPA 批量更新模式
openJPA batch update pattern
我需要更新数以千计的实体,逻辑无法放入 SQL 语句中。使用非托管 JPA 时,我使用的模式是:
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
}
在托管环境中,这会导致
java.lang.IllegalStateException: Transaction management is not available for container managed EntityManagers.
在使用容器管理的事务和蓝图时,对于此类用例,什么是好的模式?我的具体环境是 karaf 3.0.5 和 openJPA 2。3.x 如果重要的话。
更新您的 persistence.xml 配置以使用语句批处理
我需要更新数以千计的实体,逻辑无法放入 SQL 语句中。使用非托管 JPA 时,我使用的模式是:
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
}
在托管环境中,这会导致
java.lang.IllegalStateException: Transaction management is not available for container managed EntityManagers.
在使用容器管理的事务和蓝图时,对于此类用例,什么是好的模式?我的具体环境是 karaf 3.0.5 和 openJPA 2。3.x 如果重要的话。
更新您的 persistence.xml 配置以使用语句批处理