Java程序在更新数据库时崩溃(休眠)

时间:2015-06-10 13:00:31

标签: java hibernate postgresql

我正在为客户开发Java应用程序。我有一个21列的postgresql表(档案)。在我的一个函数中,我必须在数据库中保存13行,每行21列。我只使用一个hibernate会话来做它;如果不是该程序也崩溃。数据库保存了13行但它崩溃了,我不知道我是否要求太多,但我不知道另一种方法。 如果不是应用程序完美运行,这是唯一的问题。

以下是代码:

    private void CreeretchargerAR(String NumDossier) throws Exception{
    //CREATION DU DOSSIER
    //start
    Session session1= HibernateUtil.getSessionFactory().openSession();
    Transaction tx1 = session.beginTransaction();
    DossierArAs dossier = new DossierArAs();
    DossierArAsId iddos = new DossierArAsId();

    iddos.setMatricule(LabelMatricule.getText());
    iddos.setCode(labelCode.getText());
    iddos.setHorodatage(control.Horodatage());
    iddos.setDateDebutDemande(control
            .DateLabelSWTToDatePostgres(labelDateDebDemande
                    .getText()));
    iddos.setTypeAttestation(labeltypeatt.getText());
    iddos.setNumdossier(NumDossier);
    dossier.setDateDebut(control
            .DateLabelSWTToDatePostgres(labeldateDeb
                    .getText()));
    dossier.setDateFinDemande(OperationsDate.DateOracleToDatePostgres("29991231"));
    dossier.setDateFin(control
            .DateLabelSWTToDatePostgres(labeldateFin
                    .getText()));
    dossier.setMatriculegestionnaire(MatriculeGestionnaire);
    dossier.setMatriculegestionnaire(MatriculeGestionnaire);
    dossier.setStatut("E");
    dossier.setDateAccident(control
            .DateLabelSWTToDatePostgres(labelDateAccident.getText()));

    String date1 = null;
    //float sommenet = 0f;
    float sommebrut = 0f;
    float sommesft = 0f;

    float sft = 0f;
    float mois13 = 0f;
    float asl = 0f;

    //String DateDebutOracle = control.JavaUtilDateToStringASAR(labeldateDeb.getText());
    String dateasa = control.JavaUtilDateToStringASAR(labeldateDeb.getText());
    String DateDebutOracle = Salaire_DAO.moismoins1(dateasa);
    System.out.println(DateDebutOracle);

    iddos.setPerpaie(Salaire_DAO.recupperpaiARAS(DateDebutOracle));
    dossier.setId(iddos);

    asl = (Salaire_DAO.RecupSalaire(DateDebutOracle,
            LabelMatricule.getText(), rubrique.asl)== null) ? 0f:Float.parseFloat(Salaire_DAO.RecupSalaire(DateDebutOracle, 
                    LabelMatricule.getText(), rubrique.asl));
    dossier.setSalairebrut(asl);
    System.out.println(asl);

    sft = (Salaire_DAO.RecupSalaire(DateDebutOracle, LabelMatricule.getText(), rubrique.sft)== null) ? 0f:
        Float.parseFloat(Salaire_DAO.RecupSalaire(DateDebutOracle, LabelMatricule.getText(), rubrique.sft));
    dossier.setSft(sft);
    System.out.println(sft);

    sommebrut = asl;
    sommesft = sft;

    date1 = Salaire_DAO.moismoins1(DateDebutOracle);
    System.out.println(date1);
    System.out.println(sommebrut);

    session1.saveOrUpdate(dossier);
    session1.flush();
    session1.clear();


    //CREATION DES 12 LIGNES POUR CHAQUE perpaie  

    for (int i = 1; i<12; i++){
            iddos.setPerpaie(Salaire_DAO.recupperpaiARAS(date1));
            dossier.setId(iddos);

            asl = (Salaire_DAO.RecupSalaire(date1,
                    LabelMatricule.getText(), rubrique.asl)== null) ?
                    0f:Float.parseFloat(Salaire_DAO.RecupSalaire(date1, LabelMatricule.getText(), rubrique.asl));
            dossier.setSalairebrut(asl);
            System.out.println(asl);


            sft = (Salaire_DAO.RecupSalaire(date1, LabelMatricule.getText(), rubrique.sft)== null) ? 0f:
                Float.parseFloat(Salaire_DAO.RecupSalaire(date1, LabelMatricule.getText(), rubrique.sft));
            dossier.setSft(sft);
            System.out.println(sft);


            sommebrut = sommebrut +  asl;
            sommesft = sommesft + sft;

            date1 = Salaire_DAO.moismoins1(date1);
            System.out.println(date1);


        System.out.println(sommebrut);
        session1.saveOrUpdate(dossier);
        session1.flush();
        session1.clear();
        //i++;
    }   

        iddos.setPerpaie("TOTAL");
        dossier.setId(iddos);
        System.out.println(dossier.getId().getPerpaie());
        dossier.setSalairebrut(Float.parseFloat(String.valueOf(sommebrut)));
        dossier.setSft(Float.parseFloat(String.valueOf(sommesft)));
        mois13 = sommebrut/12;
        dossier.setMois13(Float.parseFloat(String.valueOf(mois13)));

        session1.saveOrUpdate(dossier);
        //session1.getTransaction().commit();
        session1.flush();
        if (!tx1.wasCommitted()){
            tx1.commit();
            session1.close();
        }
        //FIN CREATION DU DOSSIER

        //AFFICHAGE DES DONNES 

        btn_D_Valider.setVisible(true);
        btn_D_Valider.setEnabled(true);
        grpmeMois13.setVisible(true);
        grpmeSalaireTotal.setVisible(true);
        grpCongsAnnuels.setVisible(true);
        group_2.setVisible(true);
        btn_D_EditerLaDemande.setVisible(true);
        btn_D_EditerLaDemande.setEnabled(true);
        btnEditerLeDossier.setEnabled(false);

        text_mois13.setText(String.valueOf(mois13));
        sommeSalaire.setText(String.valueOf(sommebrut));

        Iterator<DossierArAs> it = dossierARAS_DAO.Recuperer12Periodes(NumDossier);
        while (it.hasNext()){
        DossierArAs ds = it.next();
            while (!ds.getId().getPerpaie().equals("TOTAL")){
                    TableItem ligne1 = new TableItem(table_SFT, SWT.NONE);
                    ligne1.setText(0, ds.getId().getPerpaie());
                    ligne1.setText(1, String.valueOf    (ds.getSft()));
                }
        }

}

1 个答案:

答案 0 :(得分:0)

它解决了,而不是while(无限的boucle)我不得不放一个if ifs all。

感谢