2016-05-09 5 views
-1

初めて登録したときにhorastotalesを追加する際に問題が発生しましたが、コードがうまく動作していますが、2番目を挿入して0にして間違った値フィールドダブルこの属性している合計は、主キーの他の値が結果jaの更新でエラーが発生しました

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(); 
    } } 

Show error in this image

+0

エラーがあるとしたら、データストアで実行されたSQLを表示しないのはなぜですか?そこから後方に向かって作業します。別名「デバッグ」 –

+0

ログに表示されないエラー表示 – alexander

+0

なぜfind-> modigy-> mergeを使用しないのですか? id-keyedエンティティの場合、そのようなものは非常に効果的でエラーの発生がはるかに少ないでしょう。そして、1つのレコードを更新するための3つの更新クエリでは絶対に必要はありません。 –

答えて

1

Equipo.idを変更している場合、私は最初の操作を挿入すると、これはのみ動作します。この操作 を行うと、コードされていますEquipo?名前の意味を示唆することは困難であるため、

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(); 
} 

が、私はこの方法の最初の部分omitedが、私はあなたを願っています:もしそうなら、→マージ→パターンを変更し、よりJPA-共通 検索への切り替えを検討アイデアをキャッチした。

+0

サシャあなたのコードは良いですが、それについて修正するためのhorastotalesが私にすべての記録horasTrabajadasを変更するときに何かがあります – alexander

関連する問題