Java 使用jpa进行多次更新

Java 使用jpa进行多次更新,java,jpa,Java,Jpa,我需要升级bd中包含多条记录的字段。如何使用JPA进行升级?。我尝试了以下方法,但不起作用: @Override public String estadoPedido(List<DetallePedido> lista) { int cod; String mensage = null; for (DetallePedido ped : lista) { cod = ped.getIdDetalle(); EntityMana

我需要升级bd中包含多条记录的字段。如何使用JPA进行升级?。我尝试了以下方法,但不起作用:

@Override
public String estadoPedido(List<DetallePedido> lista) { 
    int cod;
    String mensage = null;
    for (DetallePedido ped : lista) {
        cod = ped.getIdDetalle();
        EntityManager em = emf.createEntityManager();
        DetallePedido detPed = new DetallePedido();

        try {
            em.getTransaction().begin();
            detPed = em.find(DetallePedido.class, cod);
            detPed.setPedEstado("EN PLAN");
            em.merge(detPed);
            em.getTransaction().commit();
            mensage = "detalle seleccionado";
        } catch (Exception e) {
            mensage = "Error:/p" + e.getMessage();
        } finally{
            em.close();
        }
    }

    return mensage;
}
@覆盖
公共字符串estadoPedido(列表lista){
国际化学需氧量;
字符串尺寸=空;
对于(DetallePedido ped:lista){
cod=ped.getIdDetalle();
EntityManager em=emf.createEntityManager();
DetallePedido detPed=新的DetallePedido();
试一试{
em.getTransaction().begin();
detPed=em.find(DetallePedido.class,cod);
设置行人专用区(“EN计划”);
em.merge(detPed);
em.getTransaction().commit();
mensage=“detalle seleccionado”;
}捕获(例外e){
mensage=“Error:/p”+e.getMessage();
}最后{
em.close();
}
}
回归量表;
}

尝试以下操作:

@Override
public String estadoPedido(List<DetallePedido> lista) { 
    EntityManager em = emf.createEntityManager();
    //em.getTransaction().begin(); //Consider using Container managed transactions ,
    // if you do remove this line and the line above, and have
    //entity manager injected ! 
    String mensage = null;
    try { 
         for (DetallePedido ped : lista) { 
            detPed.setPedEstado("EN PLAN"); 
            em.merge(detPed); 
         } 
         mensage = "detalle seleccionado"; 
         em.getTransaction().commit; //consider removing this line and use Container managed transactions! 
    } catch (Exception e)  { 
         mensage = "Error:/p" + e.getMessage(); 
    } finally{ 
       em.close(); 
    } 
    return mensage; 
}
@覆盖
公共字符串estadoPedido(列表lista){
EntityManager em=emf.createEntityManager();
//em.getTransaction().begin();//考虑使用容器管理的事务,
//如果您确实删除了此行和上面的行,并且
//实体管理器注入!
字符串尺寸=空;
试试{
对于(DetallePedido ped:lista){
设置行人专用区(“EN计划”);
em.merge(detPed);
} 
mensage=“detalle seleccionado”;
em.getTransaction().commit;//考虑删除此行并使用容器管理的事务!
}捕获(例外e){
mensage=“Error:/p”+e.getMessage();
}最后{
em.close();
} 
回归量表;
}

尝试以下操作:

@Override
public String estadoPedido(List<DetallePedido> lista) { 
    EntityManager em = emf.createEntityManager();
    //em.getTransaction().begin(); //Consider using Container managed transactions ,
    // if you do remove this line and the line above, and have
    //entity manager injected ! 
    String mensage = null;
    try { 
         for (DetallePedido ped : lista) { 
            detPed.setPedEstado("EN PLAN"); 
            em.merge(detPed); 
         } 
         mensage = "detalle seleccionado"; 
         em.getTransaction().commit; //consider removing this line and use Container managed transactions! 
    } catch (Exception e)  { 
         mensage = "Error:/p" + e.getMessage(); 
    } finally{ 
       em.close(); 
    } 
    return mensage; 
}
@覆盖
公共字符串estadoPedido(列表lista){
EntityManager em=emf.createEntityManager();
//em.getTransaction().begin();//考虑使用容器管理的事务,
//如果您确实删除了此行和上面的行,并且
//实体管理器注入!
字符串尺寸=空;
试试{
对于(DetallePedido ped:lista){
设置行人专用区(“EN计划”);
em.merge(detPed);
} 
mensage=“detalle seleccionado”;
em.getTransaction().commit;//考虑删除此行并使用容器管理的事务!
}捕获(例外e){
mensage=“Error:/p”+e.getMessage();
}最后{
em.close();
} 
回归量表;
}


您看到的错误是什么?请附加堆栈跟踪和错误。此外,请在事务开始之前执行“查找”。无需在交易中选择。此外,您打开的交易太多了!没有显示错误消息,这适用于没有for循环的简单更新。您看到的错误是什么?请附加堆栈跟踪和错误。此外,请在事务开始之前执行“查找”。无需在交易中选择。此外,您打开的交易太多了!没有显示错误消息,这适用于没有for循环的简单更新。您看到的错误是什么?请附加堆栈跟踪和错误。此外,请在事务开始之前执行“查找”。无需在交易中选择。此外,您打开的交易太多了!没有显示错误消息,这适用于没有for循环的简单更新我刚刚尝试了你的建议,我得到了消息字符串,但没有运行for循环中的内容。你确定lista包含任何项目吗?它肯定应该运行,即使它抛出异常。我正在修复getTransaction部分-无需。我强烈建议您使用spring或JavaEE为您处理事务。此修改中不需要提交部分?感谢您的建议,我将在我的应用程序中进行一些更改,以再次测试您的建议。我提到,这是RPC调用的一部分,如果我想进行一次更新,它就可以工作。谢谢你的时间和帮助。然后我写。我只是尝试了你的建议,我得到了消息字符串,但没有运行for循环中的内容。你确定lista包含任何项目吗?它肯定应该运行,即使它抛出异常。我正在修复getTransaction部分-无需。我强烈建议您使用spring或JavaEE为您处理事务。此修改中不需要提交部分?感谢您的建议,我将在我的应用程序中进行一些更改,以再次测试您的建议。我提到,这是RPC调用的一部分,如果我想进行一次更新,它就可以工作。谢谢你的时间和帮助。然后我写。我只是尝试了你的建议,我得到了消息字符串,但没有运行for循环中的内容。你确定lista包含任何项目吗?它肯定应该运行,即使它抛出异常。我正在修复getTransaction部分-无需。我强烈建议您使用spring或JavaEE为您处理事务。此修改中不需要提交部分?感谢您的建议,我将在我的应用程序中进行一些更改,以再次测试您的建议。我提到,这是RPC调用的一部分,如果我想进行一次更新,它就可以工作。谢谢你的时间和帮助。然后我写。