当前位置:编程学习 > JAVA >>

HQL update 问题(紧急!!!!)

小弟做毕业设计,遇到最后一个难关,望各位大哥多多照顾!!!!已经通宵一个晚上!!!

---TestDb.java(这是我测试的程序)
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
CourseService courseService = (CourseService)context.getBean("courseService");
Course cou = new Course();
cou.setCid(1);
cou.setCscore(89);

----CourseDaoImpl
public void updateCourseScore(Course course) {
// TODO Auto-generated method stub
this.getHibernateTemplate().update(course);
}

不知道为什么,就是更新不了数据库,看sql的代码,好像没有获取到主键,我的主键是cid, 还有其它几个属性,cname....
--这是打印出来的结果!!
update dbo.COURSE set TID=?, CLID=?, CNAME=?, CBASEINFO=?, CBASEMATIRIAL=?, CBASESTATUS=?, CBASEISMANDATORY=?, CBASETYPE=?, CBASEDATETIME=?, CLOCATION_ClASSROOM=?, CLOCATION_BUILDING=?, CSCORE=? where CID=?
--------------------编程问答-------------------- --------------------编程问答-------------------- 这个你这样做事不行的  你的对象是瞬时对象,你只有先获得一个持久化对象才能进行数据更新!
Course course=(Course)this.getHibernateTemplate().get(Course.class,id);
course.set(新值);
...
this.getHibernateTemplate().update(course);


还有你这个方法要继承HibernateDaoSupport类 --------------------编程问答-------------------- 还是不行啊,我已经穿进去一个持久化对象了,但是还是更新不了。
---TestDB
Course cou2= courseService.getCourse(1);
courseService.updateCourseScore(cou2, 1);

我的持久化对象可以得到值。 --------------------编程问答-------------------- 怎么没有人恢复阿!!!! --------------------编程问答-------------------- 我擦!!!!!!!!!!!!! --------------------编程问答-------------------- 1:确认你要更新的对象为持久化状态;
2:确认该对象的主键值没有被改变;
3:确认非空字段是否为空;
--------------------编程问答-------------------- 都确认了,还是没有值。。。 --------------------编程问答-------------------- ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
CourseService courseService = (CourseService)context.getBean("courseService");
Course cou = new Course();
cou.setCid(1);
cou.setCscore(89);

----CourseDaoImpl
public void updateCourseScore(Course course) {
// TODO Auto-generated method stub
this.getHibernateTemplate().update(course);
}


我总感觉你的cou是瞬态的,不是脱管状态或者持久化状态。所以你应该使用save方法。当然。你可以从hibtenteTemplate中.获取session,然后调用session的saveOrUpdate方法,hibernate会判断你这个对像处于什么状态,然后会调用相应的save 或者 update方法 --------------------编程问答-------------------- 不知道你是怎么配置Spring事务的;
如果总是不行,改为下面的测试下:

public void updateCourseScore(Course course) {
Session session = getHibernateTemplate().getSessionFactory().openSession();   
Transaction ts = session.beginTransaction();   
try {     
    ts.begin();   
    session.update(course); 
    ts.commit();    
} catch (Exception e) {   
    ts.rollback();   
} finally {    
    session.close();

}
--------------------编程问答-------------------- 程序连接的数据库和你查看的数据库是同一个数据库吗 --------------------编程问答-------------------- 更新==你先把你要更新的那个对象找出来,改变这个对象的属性,然会在保存 --------------------编程问答-------------------- 先对要保存的对象重新赋值,再更新 --------------------编程问答-------------------- 搞不好测试类没配事务吧? --------------------编程问答-------------------- 你的事务配了么?
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,