HQL的update语句

zoutuo 2009-03-23 12:44:19
update A
set a = "12"
where car = "car1"
这条sql语句用我想用hibernate执行,该如何操作?我用的是hibernate3.
我试图这样写:

try {
session = HibernateSessionFactory.getSession();
tx = session.beginTransaction();
String hql = "update Maccount set maccount.weekcount = 12 where maccount.id = 1";
Query query = session.createSQLQuery(hql).addEntity("maccount",
Maccount.class).addJoin("id", "maccount.id").addJoin(
"weekcount", "maccount.weekcount");
tx.commit();
} catch (Exception e) {
e.printStackTrace();
if (tx != null) {
tx.rollback();
tx = null;
}
} finally {
if (session != null) {
session.close();
session = null;
}
}

虽然不报错,但执行出来没有效果。请问各路高僧,这是何原因?
...全文
24471 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
ihss23 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
tx = session.beginTransaction();
String hql = "update Maccount set weekcount = 12 where id = 1";
Query query = session.createQuery(hql);
query.executeUpd……
[/Quote]

这不是hibenate的方式。这是一般的SQL方式。
J2EE_ME 2010-06-23
  • 打赏
  • 举报
回复
如果没有主键,貌似update不会成功
liyuebuaa 2009-12-17
  • 打赏
  • 举报
回复
好人啊,问题解决了
figure99hehe 2009-10-16
  • 打赏
  • 举报
回复
sdfssssdf
Kylin8888 2009-10-11
  • 打赏
  • 举报
回复
我的问题也解决,谢谢了…………
figure99hehe 2009-03-23
  • 打赏
  • 举报
回复
你的 语句是 HQL
为何 Query 是 createSqlQuery
zoutuo 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 new_bird_0001 的回复:]
tx = session.beginTransaction();
String hql = "update Maccount set weekcount = 12 where id = 1";
Query query = session.createQuery(hql);
query.executeUpdate();
tx.commit();
[/Quote]
大哥你怎么没早点出现呢?
zoutuo 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Study_Work_2009 的回复:]
可能是你的maccount.id = 1 不存在,或者是没有绑定好
[/Quote]

如何才能让他存在?或者是绑定好?
zoutuo 2009-03-23
  • 打赏
  • 举报
回复
各位大哥真实金口难开啊!都说构造对象,那么如何构造?我的Maccount类是hibernate从数据库中映射出来的,难道不是对象吗?
能不能说的详细一些?
whywyl_1989 2009-03-23
  • 打赏
  • 举报
回复
构造Maccount对象
new_bird_0001 2009-03-23
  • 打赏
  • 举报
回复
tx = session.beginTransaction();
String hql = "update Maccount set weekcount = 12 where id = 1";
Query query = session.createQuery(hql);
query.executeUpdate();
tx.commit();
zoutuo 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hnqjc 的回复:]
这句改成:Query query = session.createQuery()......,你试试
[/Quote]

不行的。我第一次尝试的就是这种。


java.lang.NullPointerException
at org.hibernate.hql.ast.tree.IdentNode.resolveAsNakedComponentPropertyRefLHS(IdentNode.java:195)
at org.hibernate.hql.ast.tree.IdentNode.resolve(IdentNode.java:85)
at org.hibernate.hql.ast.tree.DotNode.resolveFirstChild(DotNode.java:139)
at org.hibernate.hql.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:462)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.propertyRef(HqlSqlBaseWalker.java:1080)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.assignment(HqlSqlBaseWalker.java:1008)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.setClause(HqlSqlBaseWalker.java:729)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.updateStatement(HqlSqlBaseWalker.java:349)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:237)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:218)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
at com.zoushi.hibernate.dao.ControlDao.main(ControlDao.java:1241)


所以必须用createSQLQuery。但用createSQLQuery虽然不报错,但也不修改数据库。
zoutuo 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 rayson0405 的回复:]
String hql = "update Maccount set maccount.weekcount = 12 where maccount.id = 1";
Query query = session.createSQLQuery(hql).addEntity("maccount",


hibernate 做修改不是这样做的吧.?哥们.. hql 是hibernate的查询语言吧. ???

hibernate做修改应该是..
应该是查询出来..
然后再一个个把新的值给set到这个对象..然后

transaction.commit();
session.flush();
session.close();

刚…
[/Quote]
您说的我知道的,我是想用hibernate执行SQL语句,虽然没有解决问题,但还是说声谢谢。
sourcceinsigt35 2009-03-23
  • 打赏
  • 举报
回复
ding
lili830209 2009-03-23
  • 打赏
  • 举报
回复
ding
gefengxztg 2009-03-23
  • 打赏
  • 举报
回复
构造Maccount对象,其id=1 然后将它的weekcount属性设为12,再提交
Study_Work_2009 2009-03-23
  • 打赏
  • 举报
回复
可能是你的maccount.id = 1 不存在,或者是没有绑定好
hnqjc 2009-03-23
  • 打赏
  • 举报
回复
这句改成:Query query = session.createQuery()......,你试试
rayson0405 2009-03-23
  • 打赏
  • 举报
回复
String hql = "update Maccount set maccount.weekcount = 12 where maccount.id = 1";
Query query = session.createSQLQuery(hql).addEntity("maccount",


hibernate 做修改不是这样做的吧.?哥们.. hql 是hibernate的查询语言吧. ???

hibernate做修改应该是..
应该是查询出来..
然后再一个个把新的值给set到这个对象..然后

transaction.commit();
session.flush();
session.close();

刚说的是我的做法..

如果真可以按您这么做..

那就请饶我才疏学浅.. 抱歉抱歉..
zoutuo 2009-03-23
  • 打赏
  • 举报
回复
帮帮忙,谢谢!
加载更多回复(1)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧