hibernate 更新数据问题 错误原因:你用来更新的是离线对象解决办法一:先用get/load加载,再更新解决办法二:在映射文件里进行配置,标明哪些字段不更新 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你先将对象load上来在修改啊!不要new一个对象,在设置相应的属性,再保存。 我这样子弄怎么没有用啊Session session = super.getSession(); IaSysQuery iaSysQuery = (IaSysQuery)session.get(IaSysQuery.class, ciid); Ci ci = (Ci)session.get(Ci.class, ciid); session.saveOrUpdate(iaSysQuery); session.saveOrUpdate(ci); 已经解决了,谢谢名位热心的朋友们,原来有能用NEW一个新的对象。但是我不太明白为什么我这样做可以解决中文问题public void update(Long ciid,Long querytype, String createby, String displayname, String description){ IaSysQuery iaSysQuery = (IaSysQuery)this.getHibernateTemplate().load(IaSysQuery.class, ciid); Ci ci = (Ci)this.getHibernateTemplate().load(Ci.class, ciid); iaSysQuery.setQuerytype(querytype); iaSysQuery.setCreateby(createby); ci.setDisplayname(displayname); ci.setDescription(description); getHibernateTemplate().saveOrUpdate(iaSysQuery); getHibernateTemplate().saveOrUpdate(ci); } 但是我这样做却有中文乱码问题这是为什么呢 public void updateIaSysQuery(Long querytype, String createby, Long ciid) { Session session = super.getSession(); Query query = session.createQuery("update IaSysQuery set querytype=? , createby=? where ciid=?"); query.setLong(0, querytype); query.setString(1, createby); query.setLong(2, ciid); query.executeUpdate(); } public void updateCi(String displayname, String description, Long ciid) { Session session = super.getSession(); Query query = session.createQuery("update Ci set displayname=? , description=? where id=?"); query.setString(0, displayname); query.setString(1, description); query.setLong(2, ciid); query.executeUpdate(); } 更新之前最好是把要更新的对象先查询出来再改变当前对象需要改变的属性的值而你那样更新当然数据会丢失那是因为你那个是个空对象这相当于A a = new A();a.setName("name");此时其他属性的值都为空所以你更新之后就是null 数据库升级对struts项目的影响 Java能否写股票分析软件 复选框打钩删除动态链表问题! resin ssl 问题 tomcat报错:Servlet.service() for servlet jsp threw exception 【高分求助】如何用他方提供的api来获取数据 高手才请进:一个关于Spring的hibernateTemplate的问题 问一个初级的,关于环境变量配置的问题! JSP 中TREE 的控制脚本? 用IIOP协议时,是否需用存根类文件和骨干类文件? hibernate 与sql server 2000中文问题 每个人都来看看
我这样子弄怎么没有用啊Session session = super.getSession();
IaSysQuery iaSysQuery = (IaSysQuery)session.get(IaSysQuery.class, ciid);
Ci ci = (Ci)session.get(Ci.class, ciid);
session.saveOrUpdate(iaSysQuery);
session.saveOrUpdate(ci);
已经解决了,谢谢名位热心的朋友们,原来有能用NEW一个新的对象。但是我不太明白为什么我这样做可以解决中文问题public void update(Long ciid,Long querytype, String createby, String displayname, String description){
IaSysQuery iaSysQuery = (IaSysQuery)this.getHibernateTemplate().load(IaSysQuery.class, ciid);
Ci ci = (Ci)this.getHibernateTemplate().load(Ci.class, ciid);
iaSysQuery.setQuerytype(querytype);
iaSysQuery.setCreateby(createby);
ci.setDisplayname(displayname);
ci.setDescription(description);
getHibernateTemplate().saveOrUpdate(iaSysQuery);
getHibernateTemplate().saveOrUpdate(ci);
} 但是我这样做却有中文乱码问题这是为什么呢 public void updateIaSysQuery(Long querytype, String createby, Long ciid) {
Session session = super.getSession();
Query query = session.createQuery("update IaSysQuery set querytype=? , createby=? where ciid=?");
query.setLong(0, querytype);
query.setString(1, createby);
query.setLong(2, ciid);
query.executeUpdate();
}
public void updateCi(String displayname, String description, Long ciid) {
Session session = super.getSession();
Query query = session.createQuery("update Ci set displayname=? , description=? where id=?");
query.setString(0, displayname);
query.setString(1, description);
query.setLong(2, ciid);
query.executeUpdate();
}
再改变当前对象需要改变的属性的值
而你那样更新当然数据会丢失
那是因为你那个是个空对象
这相当于A a = new A();
a.setName("name");
此时其他属性的值都为空
所以你更新之后就是null