批量更新从update [0]返回意外的行数;实际行数:0;预期:1

时间:2013-03-08 13:05:31

标签: hibernate

错误:org.hibernate.MappingException:未知实体:com.myapp.struts.timesheetForm

尝试使用hibernate框架在Struts的Action类中从Bean保存数据时,会出现上述错误。

主要文件:

timeSheet.jsp
timesheetForm.java
timeSheetAction.java

TimeSheetData.java是我的pojo。

使用hibernate从数据库中提取数据非常简单,就像一个魅力。 timeSheet.jsp完全填充。

我的timesheetaction.java是我计划将更新的数据保存到数据库的地方。

我根据表单数据创建一个bean对象。

我根据timesheetdata.java

创建一个对象

我使用beanutils将formbean的属性复制到pojo中。

然后通过会话对象进行更新。

我已经解决了它的null,但这就像我可以解决的那样。

Session sess = HibernateUtil.getSessionFactory().getCurrentSession();
sess.beginTransaction();
timesheetForm formBean = (timesheetForm)form;
timeSheetData formData = new TimeSheetData();
formBean.setAdditionhours4_1(formBean.getAdditionhours1_1());
BeanUtils.copyProperties(formData, formBean);
sess.update(formData);
sess.getTransaction().commit();
sess.flush();
sess.close();

3 个答案:

答案 0 :(得分:1)

Session sess = HibernateUtil.getSessionFactory().getCurrentSession();

    Transaction tx = sess.beginTransaction();
    // extract user data
    timesheetForm formBean = (timesheetForm)form;

int count = 0;
   int loopConstraint = 0;

   while(loopConstraint < dataList.size())
   {

      int ID = Integer.parseInt(dataList.get(loopConstraint).toString());
      TimeSheetData formData = (TimeSheetData) sess.load(TimeSheetData.class, ID);

   //relevant additions to database

    sess.update(formData);
      sess.flush();
      sess.clear();

   }
      tx.commit();

答案 1 :(得分:0)

我认为没有可供更新的记录

答案 2 :(得分:0)

请检查hibernate映射,通过更改anotations中的可更新和可插入的参数,可以轻松解决此问题。

例如,在我的情况下,我通过更改它来解决它:

@OneToMany
@JoinColumn(name = "columnPK", updatable = true, insertable = true)
private List<ObjectX> relatedElments;

用这个:

@OneToMany
@JoinColumn(name = "columnPK", updatable = false, insertable = false)
private List<ObjectX> relatedElments;

解释是这个参数阻止hibernate更新相关表,同时你试图插入/更新其他超级&#39;表。因此,请检查所有hibernate anotations。