如何在hibernate2中执行这样一条UPDATE语句

程序如下:Stringsql="updateTABLE=:TABLEsetcontent=replace(content,'OLD=:OLD','NEW=:NEW')";... 程序如下:
String sql ="update TABLE=:TABLE set content=replace(content,'OLD=:OLD','NEW=:NEW')";
try{
tx = session.beginTransaction();
Query query=session.createQuery(sql);
query.setString("TABLE", type);
query.setString("OLD", old);
query.setString("NEW", myNew);
query.list();
tx.commit();
}
异常:query must begin with SELECT or FROM: updat...

现在我想执行一条:update TABLE=:TABLE set content=replace(content,'OLD=:OLD','NEW=:NEW')
这样的语句,用hibernate该怎么做?
我是想把一个表中所有包含某些关键字的地方替换掉.
怎可能还换hibernate3,我项目都快写了!那我还不如直接做个直连省事呢!
展开
 我来答
luopeng___521
2008-02-26
知道答主
回答量:49
采纳率:0%
帮助的人:0
展开全部
给你一个我写的方法参考一下:
public void updateClientState() {
try {
getHibernateTemplate().execute(new HibernateCallback(){

Date currentTime = new Date();//当前系统时间
Date day180 = DateUtil.getAddDay(currentTime, -180);//当前系统时间30 天以前的时间
Date day90 = DateUtil.getAddDay(currentTime, -90);//当前系统时间30 天以前的时间

SimpleDateFormat sdftime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

// 更新所有在90天以内有合同记录或者创建时间是在90天以内
String before90day = "update t_sme_sps_client set client_state = ?"+
"where client_contract_date >= ? "+
"and (client_parent_id is null)";
// 更新所有在90天到180天之间的有合同记录或者创建时间是在90天到180天之间的
String before180day = "update t_sme_sps_client set client_state = ?" +
"where (client_contract_date< ? and client_contract_date >= ?)" +
"and (client_parent_id is null)";

String hqlothers = "update t_sme_sps_client set client_state = ? " +
"where client_contract_date < ? " +
"and (client_parent_id is null) ";
// 更新所有在180天以外的
public Object doInHibernate(Session session)
throws HibernateException, SQLException {

Connection conn=session.connection();

PreparedStatement ps = conn.prepareStatement(before90day);
ps.setInt(1,0);
ps.setTimestamp(2, Timestamp.valueOf(sdftime.format(day90)));
ps.executeUpdate();

PreparedStatement ps2 = conn.prepareStatement(before180day);
ps2.setInt(1,1);
ps2.setTimestamp(2, Timestamp.valueOf(sdftime.format(day90)));
ps2.setTimestamp(3, Timestamp.valueOf(sdftime.format(day180)));
ps2.executeUpdate();

PreparedStatement ps3 = conn.prepareStatement(hqlothers);
ps3.setInt(1,2);
ps3.setTimestamp(2, Timestamp.valueOf(sdftime.format(day180)));
ps3.executeUpdate();

conn.commit();

return null;
}});
} catch (DataAccessException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (ParseException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小鹰呗
2008-02-22 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:103
采纳率:0%
帮助的人:121万
展开全部
hibernate2不行吧,建议你还是看看hibernate3吧,不要浪费时间呀,hibernate3是可以的,它提供DML式的HQL语句,可执行update、delete形式的语句,是executeUpdate()方法。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qman23
2008-02-22 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:121万
展开全部
HIBERNATE是面向对象的框架,HQL语句里面不能识别UPDATE关键字,只有UPDATE方法,在方法里传递你要更新的对象就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
llscompass
2008-03-06 · TA获得超过183个赞
知道小有建树答主
回答量:141
采纳率:0%
帮助的人:195万
展开全部
把你的程序改一下:
String sql ="update TABLE=:TABLE set content=replace(content,'OLD=:OLD','NEW=:NEW')";
Transaction tx = session.beginTransaction();
try{
Query query = session.createQuery(sql);
query.setString("TABLE", type);
query.setString("OLD", old);
query.setString("NEW", myNew);
query.executeUpdate();
tx.commit();
}catch (Exception e)
{

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d50c59d
2008-02-23
知道答主
回答量:4
采纳率:0%
帮助的人:6.2万
展开全部
query.list()是一个查询的方法 也就是说把结果变为list
而更新是要调用query.executeUpdate()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式