Я пытаюсь вставить много строк в циклы while. Я понимаю, что я должен создать отдельный новый переходный экземпляр в теле цикла в транзакции.Строки не сохраняются при использовании объемных вставок в спящем режиме
Из моего опыта, не создающего отдельный экземпляр переходного процесса (переходный экземпляр внешнего тела цикла), вставляет, по крайней мере, одну строку, являющуюся последней строкой. Нужно ли использовать save
только один раз здесь, прежде чем совершать транзакции?
Возможно использование flush()
и clear()
в этом случае?
Я относительно новичок в hibernate.I был бы благодарен за любую помощь или указал бы мне в правильном направлении.
Прошу извинить, что я нарушаю соглашение о верблюжьем корпусе для переменных и методов.
public boolean addVariableHonorariumDetails(Monthly_variable_honorarium_processing mvhp
, Monthly_variable_group_honorarium_processing mvghp
, Monthlyvariablecompid compositeID)
{
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
String ccyymm = mvhp.getMvhp().getVariable_monthly_ccyy()+mvhp.getMvhp().getVariable_monthly_month();
try
{
tx = session.beginTransaction();
// ctrl query
M_control_table mct = (M_control_table) session.createQuery("from M_control_table").uniqueResult(); //single result
Query query = session.createSQLQuery(
"Select c.Booklet_type, SUM(c.End_Leaf - c.Start_Leaf +1) as No_of_Coupons from m_coupon_sale c where date_format(c.Booklet_Sale_Date, '%Y%m') = :string and c.Booklet_type in ('GR','PI') group by c.Booklet_Type")
.addScalar("c.Booklet_type", Hibernate.STRING)
.addScalar("No_of_Coupons", Hibernate.STRING)
.setString("string", ccyymm);
ScrollableResults results = query.scroll();
Integer sumTotalOfPayment = 0;
while (results.next())
{
Object[] row = results.get();
mvghp.setMvhpgroup(new Monthlyvariablecompid(mvhp.getMvhp().getVariable_monthly_month()
, mvhp.getMvhp().getVariable_monthly_ccyy()
, row[0].toString())
);
mvghp.setNo_of_items(row[1].toString());
Integer no_of_items = Integer.parseInt(mvghp.getNo_of_items(), 10);
mvghp.setGroup_rate((row[0].toString().equals("GR")) ? mct.getRate_for_green_coupons()
: mct.getRate_for_pink_coupons() );
Integer variable_payment = no_of_items * Integer.parseInt(mvghp.getGroup_rate(), 10);
sumTotalOfPayment = sumTotalOfPayment + variable_payment;
mvghp.setVariable_payment(variable_payment.toString());
session.save(mvghp);
session.flush();
session.clear();
}
Query query2 = session.createSQLQuery(
"select m.pooja_name, count(*) as no_of_items from t_pooja_booking t inner join m_pooja_detail m on t.pooja_id=m.pooja_id where date_format(t.pooja_date, '%Y%m')= :string and m.pooja_name in ('A','B') group by m.pooja_name")
.addScalar("m.pooja_name", Hibernate.STRING)
.addScalar("no_of_items", Hibernate.STRING)
.setString("string", ccyymm);
ScrollableResults results1 = query2.scroll();
while (results1.next())
{
Object[] row = results1.get();
mvghp.setMvhpgroup(new Monthlyvariablecompid(mvhp.getMvhp().getVariable_monthly_month()
, mvhp.getMvhp().getVariable_monthly_ccyy()
, row[0].toString())
);
mvghp.setNo_of_items(row[1].toString());
Integer no_of_items = Integer.parseInt(mvghp.getNo_of_items(), 10);
mvghp.setGroup_rate((row[0].toString().equals("A"))?mct.getRate_for_108_vadamalas_cook()
:mct.getRate_for_51_vadamalas_cook());
Integer variable_payment = no_of_items * Integer.parseInt(mvghp.getGroup_rate() , 10) ;
sumTotalOfPayment = sumTotalOfPayment + variable_payment;
mvghp.setVariable_payment(variable_payment.toString());
session.save(mvghp);
session.flush();
session.clear();
}
mvhp.setTotal_variable_payment(sumTotalOfPayment.toString());
session.save(mvhp);
tx.commit();
}
catch(Exception e)
{
if(tx!=null)
{
tx.rollback();
}
e.printStackTrace();
return false;
}
finally
{
session.close();
}
return true;
}