在hibernate里hql语句能否用insert

cjh122522136 2008-07-05 02:54:59
public int save(final String[] str){
return (Integer) getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query=session.createQuery("insert into UserInfo(username,password,email) values(?,?,?)");
for(int i=0;i<str.length;i++){
query.setParameter(i, str[i]);
}
return query.executeUpdate();
}

});
}
这句Query query=session.createQuery("insert into UserInfo(username,password,email) values(?,?,?)")能否这样写?
帮帮忙,急!!!
...全文
8054 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
否试过,一般都是用save(xxxx);
mgz521009 2011-12-12
  • 打赏
  • 举报
回复
说下我的意见,hibernate 的(Hql)一些对对象方法不是所有的都可以实现的,例如:多表之间的查询,而且各表之间又有关系,而且要的数据也很复杂!这里用hibernate 封装好的对对象使用的方法,根本没有办法实现,这时就会用的 sql语句来完成,用到Hbiernate的 createSQLQuery()来实现,不过此方法查询回来的结果,类型需要转换,才方便使用 返回的类型是 List<Object[]> 的类型,取的时候循环遍历 取值。可以放在自己预定好的Vo类中!为方法显示!
tanshulin520 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 liyongfu81 的回复:]

那么多人说了半天都没有解决楼主所提问题,我来直接回复楼主吧:
使用HQL语句来完成插入操作是不能实现的,不管你使用insert into....values...还是insert into.....select.....都不行

原因:因为Hibernate的HQL语言是用于面向对象实现查询功能的,然而在插入操作中是不会牵涉任何查询动作的,所以HQL不能用于insert语句的插入操作,而s……
[/Quote]

正解。 以前也犯过同样的错误,至今不明白原因.太感谢了!
tbgdwj01 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 liyongfu81 的回复:]
那么多人说了半天都没有解决楼主所提问题,我来直接回复楼主吧:
使用HQL语句来完成插入操作是不能实现的,不管你使用insert into....values...还是insert into.....select.....都不行

原因:因为Hibernate的HQL语言是用于面向对象实现查询功能的,然而在插入操作中是不会牵涉任何查询动作的,所以HQL不能用于insert语句的插入操作,而se……
[/Quote]

正解
半个鼠标 2011-11-17
  • 打赏
  • 举报
回复
insert是可以用的,如果想要用sql
可以session.createSQLQuery("insert into ...")
pj51game 2011-11-16
  • 打赏
  • 举报
回复
楼主是想写个批量插入数据,而且不想用hibernate的save来操作,因为save来操作这里是很麻烦的,因为save只能保存一个对像,要是这个对像过多的话,而且每个对像的数据都有所不一样,用save就每花大量的时间来处理对像了,所以还不如直接来操作数据库,所以会想到用insert into来解决这问题。不过hibernate hql不支持这种insert 就像上楼说的那样。
个人建议用事务来处理,用SQLQuery 原生态sql来写这里,就能解决你的问题了
SQLQuery query=session.createSQLQuery("insert into youtable (username,password,email) values(?,?,?)");
liyongfu81 2011-10-06
  • 打赏
  • 举报
回复
那么多人说了半天都没有解决楼主所提问题,我来直接回复楼主吧:
使用HQL语句来完成插入操作是不能实现的,不管你使用insert into....values...还是insert into.....select.....都不行

原因:因为Hibernate的HQL语言是用于面向对象实现查询功能的,然而在插入操作中是不会牵涉任何查询动作的,所以HQL不能用于insert语句的插入操作,而select、update、delete语句都可以有可能的查询实现,比如:

select语句时标准的查询,这个就不用再说了
update语句:update 对象名 set.....where......
delete语句:delete from 对象名 where .....
看到了没有,update与delete牵涉到where的查询筛选过程,这个过程是需要采用HQL来实现的,然而insert永远牵涉不到查询筛选过程,所以Hibernate没有对插入做insert实现

搞不懂为什么有那么多人说可以,说着这句话的人请你们动动脑子,如果不想动脑子自己动手试一下也可以看出问题嘛,不要张开嘴就乱说一通,误人子弟。

张国良 2011-06-05
  • 打赏
  • 举报
回复
用 save挺好的直接插入了就
wjy19900320 2011-06-05
  • 打赏
  • 举报
回复
不可以...
zhaoyanjie_001 2011-04-12
  • 打赏
  • 举报
回复
楼主应该是考虑性能测试,save和hql都能实现,hql估计不能关联插入。
  • 打赏
  • 举报
回复
一般是 insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ..." 这么写的。hql 只支持INSERT INTO ... SELECT ...形式,不支持INSERT INTO ... VALUES ...形式.
leiwuluan 2009-11-30
  • 打赏
  • 举报
回复
用Hql也有好处。当你要对多个表进行插入时一条Hql就可解决了,如果你用Hibernate里面的save那样只会降低了性能。
zwei27 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 javaalpha 的回复:]
一般都是使用createSQLQuery()这个方法实现。
我有个疑问怎么将hibernate生成的sql语句写到数据库呢??
正在解决中
[/Quote]
朋友我好像看到你提的問題有人發貼~~這個不好弄
connor_zheng 2009-08-21
  • 打赏
  • 举报
回复
直接操作对象就ok了,你不用的属性为空就行了啊
donald82 2009-08-21
  • 打赏
  • 举报
回复
直接引用save吧
j2ee技术群:24739115
JavaAlpha 2009-08-21
  • 打赏
  • 举报
回复
一般都是使用createSQLQuery()这个方法实现。
我有个疑问怎么将hibernate生成的sql语句写到数据库呢??
正在解决中
zwei27 2009-08-21
  • 打赏
  • 举报
回复
直接把HQL轉化成SQL語句就可以像LZ那樣進行添加了。。。。
HIBERNATE可以轉
lin87915 2009-08-14
  • 打赏
  • 举报
回复
哪位高手说明白一点可以吗!!!小弟也是刚弄这!!感觉比ASP.NET 复杂多了!!
烦啊!!!!
龙龙ago 2009-08-11
  • 打赏
  • 举报
回复
别人要实现的方法是hibernate本身不自带的方法,你 save(),有个什么用?
我现在也在做SSH项目 所有方法都是自己用hql写 ,麻烦死
liguangwen86 2009-05-01
  • 打赏
  • 举报
回复
可以
加载更多回复(26)

67,512

社区成员

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

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