0

テーブルからレコードを選択し、選択したレコードを別のテーブルに挿入しているときに、HQL挿入クエリが失敗します。すべてのデバッグメッセージ「insidelist」と反復リストがコンソールに表示されますが、Companyテーブルにレコードを挿入できません。

DAOクラスコード:-

public void approveCompany(int companyId, String varifier){
    session.beginTransaction();
    Query query=session.createQuery("from Provisional where companyID=?");
    query.setInteger(0, companyId);
    @SuppressWarnings("unchecked")
    List<Provisional> list=query.list();        
    session.getTransaction().commit();
if(list.size()>0)
    {
        System.out.println("inside list");
        for(Provisional p:list){
            System.out.println("iterating list");
Query approveQuery=session.createQuery("insert into Company(companyID" +
                    ",annualValueOfTotalExport,annualValueOfTotalSale,cityID,companyAddress" +
                    "companyEmail,companyName,companyType,contactPersionPosition,contactPersonEmail," +
                    "contactPersonFaxNo,contactPersonName,contactPersonPhoneNo,countryID,faxNo," +
                    "licenceNo,loginID,oldPassword,password,phoneNo,stateID,texID,updated_At," +
                    "verifierID,website,zipCode) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?," +
                    "?,?,?,?,?,?,?,?,?,?,?,?)");
            approveQuery.setParameter(1, p.getCompanyID());
            approveQuery.setParameter(2, p.getAnnualValueOfTotalExport());
            approveQuery.setParameter(3, p.getAnnualValueOfTotalSale());
            approveQuery.setParameter(4, p.getCityID());
            approveQuery.setParameter(5, p.getCompanyAddress());
            approveQuery.setParameter(6, p.getCompanyEmail());
            approveQuery.setParameter(7, p.getCompanyName());
            approveQuery.setParameter(8, p.getCompanyType());
            approveQuery.setParameter(9, p.getContactPersonPosition());
            approveQuery.setParameter(10, p.getContactPersonEmail());
            approveQuery.setParameter(11, p.getContactPersonFaxNo());
            approveQuery.setParameter(12, p.getContactPersonName());
            approveQuery.setParameter(13, p.getContactPersonPhoneNo());
            approveQuery.setParameter(14, p.getCountryID());
            approveQuery.setParameter(15, p.getFaxNo());
            approveQuery.setParameter(16, p.getLicenceNo());
            approveQuery.setParameter(17, p.getLoginID());
            approveQuery.setParameter(18, p.getPassword());
            approveQuery.setParameter(19, p.getPassword());
            approveQuery.setParameter(20, p.getPhoneNo());
            approveQuery.setParameter(21, p.getStateID());
            approveQuery.setParameter(22, p.getTaxID());
            approveQuery.setParameter(23, p.getCreated_On());
            approveQuery.setParameter(24, varifier);
            approveQuery.setParameter(25, p.getWebsite());
                      approveQuery.setParameter(26,p.getZipCode());         
           approveQuery.executeUpdate();
            session.getTransaction.commit();
        }
    }
    session.close();

}
4

2 に答える 2

1

insert into を使用して挿入する理由....

作成してみるCompany company = new Company();

次に、すべての値をこのオブジェクトに設定し、次を使用して保存します.save();

于 2013-03-21T06:21:18.350 に答える
0

このようにバッチ挿入を使用します。

hibernate.jdbc.batch_size 20

     Session session = sessionFactory.openSession();
     Transaction tx = session.beginTransaction();
     for ( int i=0; i<100000; i++ ) 
         {
             Customer customer = new Customer(.....);
             session.save(customer);
         if ( i % 20 == 0 ) { //20, same as the JDBC batch size
           //flush a batch of inserts and release memory:
           session.flush();
           session.clear();
         }
     }

     tx.commit();
     session.close();
于 2013-03-21T07:04:58.513 に答える