我在第一次注册时添加horastotales时出现更新问题代码工作正常但是当我插入第二个时将我放在0并开始添加错误值字段sum是属性double这个是用于执行此操作的代码 这仅适用于我插入第一个操作,如果其他值被更改结果
public void crearHistorial(Equipo equipo) {
historialDao.crearHistorial(equipo, login.getUsuario(), historial.getHorastd(), historial.getUbicacion());
EntityManagerFactory emf = Persistence.createEntityManagerFactory("inventarioPU");
EntityManager em = emf.createEntityManager();
equipo.setNumeroControl(historial.getUbicacion());
equipoDAO.actualizarequipo(equipo, login.getUsuario());
abrirEquipo(equipoID);
Query query = em.createQuery("UPDATE Historial c SET c.horasTrabajadas= c.horastd -" + equipo.getHorastotales() + " WHERE c.equipo.id=" + equipo.getId());
em.getTransaction().begin();
query.executeUpdate();
em.getTransaction().commit();
listahist= bm.buscarHistorial(equipoID);
for (Historial hist : listahist) {
Query query1 = em.createQuery("UPDATE Equipo c SET c.horastotales = c.horastotales +" + hist.getHorasTrabajadas() + " WHERE c.id=" + equipo.getId());
Query query2 = em.createQuery("UPDATE Equipo c SET c.horasmotor= c.horasmotor -" + hist.getHorasTrabajadas() + " WHERE c.id=" + equipo.getId());
Query query3 = em.createQuery("UPDATE Equipo c SET c.horashrida= c.horashrida -" + hist.getHorasTrabajadas() + " WHERE c.id=" + equipo.getId());
em.getTransaction().begin();
query1.executeUpdate();
query2.executeUpdate();
query3.executeUpdate();
em.getTransaction().commit();
} }
答案 0 :(得分:1)
Equipo.id
是Equipo
的主键?如果是这样,请考虑切换到更多JPA-common find→modify→merge 模式:
public void crearHistorial(Equipo equipo) {
// ...
// put the Equipo entity in a context
Equipo c = em.find(Equipo.class, equipo.getId());
// modify the entity
for (Historial hist : listahist) {
c.setHorastotales(e.getHorastotales() + hist.getHorasTrabajadas());
c.setHorasmotor(c.getHorasmotor() - hist.getHorasTrabajadas());
c.setHorashrida(c.getHorashrida() - hist.getHorasTrabajadas());
}
// update the entity in a DB
em.getTransaction().begin();
em.merge(c);
em.getTransaction().commit();
}
我省略了方法的第一部分,因为很难提出名称的含义,但我希望你已经抓住了这个想法。