关于hibernate中update使用别名的问题

本文介绍了一种在使用Hibernate进行数据更新操作时出现的错误情况,并给出了正确的解决方案。作者通过删除别名的方式成功解决了更新语句的语法错误问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天写了一个程序:

getHibernateTemplate().execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session
.createQuery("update Project project set project.seq=? where project.id=?");
query.setInteger(0, seq);
query.setInteger(1, id);
return query.executeUpdate();
}
});


[size=large]
发现出错了,我把sql语句复制到SQLyog里面运行没有问题,
但程序错了,错误提示为:[/size]

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.orm.hibernate3.HibernateQueryException: expecting "set", found 'project' near line 1, column 17 [update Project project set project.seq=? where project.id=?]; nested exception is org.hibernate.hql.ast.QuerySyntaxError: expecting "set", found 'dishSort' near line 1, column 17 [update Project project set project.seq=? where project.id=?]
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:408)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:360)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)

[size=large]
我删去别名project,就好了,看来在update语句里面是不能使用别名的。
[/size]

getHibernateTemplate().execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session
.createQuery("update Projectsetseq=? where id=?");
query.setInteger(0, seq);
query.setInteger(1, id);
return query.executeUpdate();
}
});


[size=x-large] [color=red]不知道各位大哥有没有遇到这种情况。恳请研究过源码的大哥帮我解释一下,我感觉按照它的提示信息,它应该是发现update之后,后面必须是set,负责则出错[/color]。[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值