hibernate 修改一个字段报错,请大家帮忙

时间:2021-09-09 15:07:36
public class DutyDaoImpl extends MySupportHibernate implements DutyDao{

  public void delete(String id) {
System.out.println("更改前:"+id);//这个有值
getHibernateTemplate().update(" update Duty set dutystate=2 where dutyid=?",Integer.parseInt(id));
}

}

public class MySupportHibernate extends HibernateDaoSupport {
。。。。
}

我想根据duty的dutyid来修改dutystate,执行更新时报错:
org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity:  update Duty set dutystate=2 where dutyid=?; nested exception is org.hibernate.MappingException: Unknown entity:  update Duty set dutystate=2 where dutyid=?
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:661)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)


我初学hibernate,看到的要修改时的例子都是这样改的:
getHibernateTemplate().update(duty);

这里有点不明白,这里的参数duty根据什么来确定要休息哪一行呢?是不是在传进来的时候全部设置好他的属性,如
duty.setDutyid(1),duty.setDutyState(2)?

6 个解决方案

#1


修改的方法名用delete(⊙﹏⊙b汗)
一般hibernate做更新的方法是这样的吧


 private void updateEvents(Event theEvent) {
     Session session=HibernateUtil.getSessionFactory().openSession();
     session.beginTransaction();
     session.update(theEvent);
     System.out.println("--------已经执行了更新--------");
     session.getTransaction().commit();
     }
    

我刚学

#2


命名的问题,我页面上是写删除的,因为有别的表跟这个关联,所以删除时我就改一下状态,让它隐藏起来而已。
你的这个方法我知道,现在的问题是 theEvent 这个里面不是有好多属性么,我还得把这些属性一个一个用setXX()方法设好.我现在只想根据id修改其中的一项属性,如果还要把所有的属性都设置好就很麻烦了
引用 1 楼 liuchuan12 的回复:
修改的方法名用delete(⊙﹏⊙b汗)
一般hibernate做更新的方法是这样的吧


Java code

 private void updateEvents(Event theEvent) {
        Session session=HibernateUtil.getSessionFactory().openSession();
        session.b……

#3


我一般都先根据id找到这行记录,然后将Hibernate返回的object转为Duty 实体,然后将值set到Duty 中再update Duty这个Object对象 就可以了

#4


这个是可以的。只是表中有二三十个字段的时候,我只想改一个,就得set30次。还有多查询一下,感觉不是很好
引用 3 楼 wangju309 的回复:
我一般都先根据id找到这行记录,然后将Hibernate返回的object转为Duty 实体,然后将值set到Duty 中再update Duty这个Object对象 就可以了

#5


i get it. ths!

#6


继续努力。。

#1


修改的方法名用delete(⊙﹏⊙b汗)
一般hibernate做更新的方法是这样的吧


 private void updateEvents(Event theEvent) {
     Session session=HibernateUtil.getSessionFactory().openSession();
     session.beginTransaction();
     session.update(theEvent);
     System.out.println("--------已经执行了更新--------");
     session.getTransaction().commit();
     }
    

我刚学

#2


命名的问题,我页面上是写删除的,因为有别的表跟这个关联,所以删除时我就改一下状态,让它隐藏起来而已。
你的这个方法我知道,现在的问题是 theEvent 这个里面不是有好多属性么,我还得把这些属性一个一个用setXX()方法设好.我现在只想根据id修改其中的一项属性,如果还要把所有的属性都设置好就很麻烦了
引用 1 楼 liuchuan12 的回复:
修改的方法名用delete(⊙﹏⊙b汗)
一般hibernate做更新的方法是这样的吧


Java code

 private void updateEvents(Event theEvent) {
        Session session=HibernateUtil.getSessionFactory().openSession();
        session.b……

#3


我一般都先根据id找到这行记录,然后将Hibernate返回的object转为Duty 实体,然后将值set到Duty 中再update Duty这个Object对象 就可以了

#4


这个是可以的。只是表中有二三十个字段的时候,我只想改一个,就得set30次。还有多查询一下,感觉不是很好
引用 3 楼 wangju309 的回复:
我一般都先根据id找到这行记录,然后将Hibernate返回的object转为Duty 实体,然后将值set到Duty 中再update Duty这个Object对象 就可以了

#5


i get it. ths!

#6


继续努力。。