在hibernate里hql语句能否用insert

时间:2021-05-25 23:11:24
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(?,?,?)")能否这样写?
帮帮忙,急!!!

47 个解决方案

#1


该回复于2015-05-26 11:24:15被管理员删除

#2


可以啊

#3


createSQLQuery 试试

#4


LZ真无聊。。。。。飘过  。。。。。。。。。。。。。!

#5


引用楼主 cjh122522136 的帖子:
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.executeUpda…


getHibernateTemplate().save(object)就可以了啊,为什么还要用insert呢。

#6


hibernate3 可以 写入语句后 用createQuery 的一个update 方法

#7


你为什么要这样子写呢,我直接保存下对象sava(Object object)就行了

#8


引用 4 楼 CaiNiao_ge 的回复:
LZ真无聊。。。。。飘过  。。。。。。。。。。。。。!


可以直接用save方法实现啊。。。为什么要绕远路。。。

#9


createQuery语句根本不能那么写

#10


引用 7 楼 huang456wei 的回复:
你为什么要这样子写呢,我直接保存下对象sava(Object object)就行了

恩,这样好的很

#11


直接SET不是更好!从来没在HIBERNATE里面用过INSERT,不过肯定是支持的

#12


可以试一下呀,

#13


记得以前试过hibernate2,Query 语句不成,但可以写成SQLQuery 

#14


引用 8 楼 cuilike 的回复:
引用 4 楼 CaiNiao_ge 的回复:
LZ真无聊。。。。。飘过  。。。。。。。。。。。。。! 
 

可以直接用save方法实现啊。。。为什么要绕远路。。。

#15


 你可以用最简单的方法呀  

  那就是直接save呀

#16


引用 5 楼 dengyiyu 的回复:
引用楼主 cjh122522136 的帖子:
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]);…

up

#17


save就可以了,Hibernate自身提供了几个简单的操作,看看手册就知道了

#18


insert 语句怎么写到 Query 里面来啦。可以的吗???

#19


你们楼上这些人,人家既然这样写肯定是有这方面的需求,肯定是有特殊情况啊!非要人家save对象,知之为知之,不知为不知,何必要大家和讽刺人家呢!

#20


可以直接用save方法实现啊。。。为什么要绕远路。。。

#21


楼主这样写 insert into UserInfo(username,password,email) values(?,?,?)  应该要个构造方法 UserInfo(username,password,email) 

#22


如果使用对象进行操作的用createQuery
如果用SQL操作的用createSQLQuery

#23


引用 5 楼 dengyiyu 的回复:
引用楼主 cjh122522136 的帖子:
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]);…

。。。

#24


createSQLQuery应该可以~~你这样写不行,直接save(object)

#25


hibernate就是把关系转换成对象来操作,用insert就失去了hibernate的意义。

#26


可以啊,session.connection()回归纯天然JDBC操作,哈哈
session.createSQLQuery()还是离不开对象操作。
session.createQuery(...HQL语句...),当然不能出现数据库的东西了,因为HQL是面向对象的查询语句。
不明白LZ为什么会问这样的问题?

#27


不可以,你如果那样写就成了原生sql语句,然而,你如果要用原生sql语句,那么,操作并不是和jdbc的sql语句一样的,它在查询时还要把对象的属性加上去。

#28


可以

#29


别人要实现的方法是hibernate本身不自带的方法,你 save(),有个什么用?
我现在也在做SSH项目  所有方法都是自己用hql写  ,麻烦死

#30


哪位高手说明白一点可以吗!!!小弟也是刚弄这!!感觉比ASP.NET 复杂多了!!
烦啊!!!!

#31


直接把HQL轉化成SQL語句就可以像LZ那樣進行添加了。。。。
HIBERNATE可以轉

#32


一般都是使用createSQLQuery()这个方法实现。
我有个疑问怎么将hibernate生成的sql语句写到数据库呢??
正在解决中

#33


直接引用save吧
j2ee技术群:24739115

#34


直接操作对象就ok了,你不用的属性为空就行了啊

#35


引用 32 楼 javaalpha 的回复:
一般都是使用createSQLQuery()这个方法实现。
 我有个疑问怎么将hibernate生成的sql语句写到数据库呢??
 正在解决中

朋友我好像看到你提的問題有人發貼~~這個不好弄

#36


用Hql也有好处。当你要对多个表进行插入时一条Hql就可解决了,如果你用Hibernate里面的save那样只会降低了性能。

#37


一般是 insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ..." 这么写的。hql 只支持INSERT INTO ... SELECT ...形式,不支持INSERT INTO ... VALUES ...形式.

#38


楼主应该是考虑性能测试,save和hql都能实现,hql估计不能关联插入。

#39


不可以...

#40


用 save挺好的直接插入了就

#41


那么多人说了半天都没有解决楼主所提问题,我来直接回复楼主吧:
使用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实现

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

#42


楼主是想写个批量插入数据,而且不想用hibernate的save来操作,因为save来操作这里是很麻烦的,因为save只能保存一个对像,要是这个对像过多的话,而且每个对像的数据都有所不一样,用save就每花大量的时间来处理对像了,所以还不如直接来操作数据库,所以会想到用insert into来解决这问题。不过hibernate hql不支持这种insert 就像上楼说的那样。
个人建议用事务来处理,用SQLQuery 原生态sql来写这里,就能解决你的问题了
SQLQuery query=session.createSQLQuery("insert into youtable (username,password,email) values(?,?,?)");

#43


insert是可以用的,如果想要用sql
可以session.createSQLQuery("insert into ...")

#44


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

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


正解

#45


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

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


正解。  以前也犯过同样的错误,至今不明白原因.太感谢了!

#46


说下我的意见,hibernate 的(Hql)一些对对象方法不是所有的都可以实现的,例如:多表之间的查询,而且各表之间又有关系,而且要的数据也很复杂!这里用hibernate 封装好的对对象使用的方法,根本没有办法实现,这时就会用的 sql语句来完成,用到Hbiernate的 createSQLQuery()来实现,不过此方法查询回来的结果,类型需要转换,才方便使用  返回的类型是 List<Object[]> 的类型,取的时候循环遍历 取值。可以放在自己预定好的Vo类中!为方法显示!     

#47


否试过,一般都是用save(xxxx);

#1


该回复于2015-05-26 11:24:15被管理员删除

#2


可以啊

#3


createSQLQuery 试试

#4


LZ真无聊。。。。。飘过  。。。。。。。。。。。。。!

#5


引用楼主 cjh122522136 的帖子:
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.executeUpda…


getHibernateTemplate().save(object)就可以了啊,为什么还要用insert呢。

#6


hibernate3 可以 写入语句后 用createQuery 的一个update 方法

#7


你为什么要这样子写呢,我直接保存下对象sava(Object object)就行了

#8


引用 4 楼 CaiNiao_ge 的回复:
LZ真无聊。。。。。飘过  。。。。。。。。。。。。。!


可以直接用save方法实现啊。。。为什么要绕远路。。。

#9


createQuery语句根本不能那么写

#10


引用 7 楼 huang456wei 的回复:
你为什么要这样子写呢,我直接保存下对象sava(Object object)就行了

恩,这样好的很

#11


直接SET不是更好!从来没在HIBERNATE里面用过INSERT,不过肯定是支持的

#12


可以试一下呀,

#13


记得以前试过hibernate2,Query 语句不成,但可以写成SQLQuery 

#14


引用 8 楼 cuilike 的回复:
引用 4 楼 CaiNiao_ge 的回复:
LZ真无聊。。。。。飘过  。。。。。。。。。。。。。! 
 

可以直接用save方法实现啊。。。为什么要绕远路。。。

#15


 你可以用最简单的方法呀  

  那就是直接save呀

#16


引用 5 楼 dengyiyu 的回复:
引用楼主 cjh122522136 的帖子:
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]);…

up

#17


save就可以了,Hibernate自身提供了几个简单的操作,看看手册就知道了

#18


insert 语句怎么写到 Query 里面来啦。可以的吗???

#19


你们楼上这些人,人家既然这样写肯定是有这方面的需求,肯定是有特殊情况啊!非要人家save对象,知之为知之,不知为不知,何必要大家和讽刺人家呢!

#20


可以直接用save方法实现啊。。。为什么要绕远路。。。

#21


楼主这样写 insert into UserInfo(username,password,email) values(?,?,?)  应该要个构造方法 UserInfo(username,password,email) 

#22


如果使用对象进行操作的用createQuery
如果用SQL操作的用createSQLQuery

#23


引用 5 楼 dengyiyu 的回复:
引用楼主 cjh122522136 的帖子:
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]);…

。。。

#24


createSQLQuery应该可以~~你这样写不行,直接save(object)

#25


hibernate就是把关系转换成对象来操作,用insert就失去了hibernate的意义。

#26


可以啊,session.connection()回归纯天然JDBC操作,哈哈
session.createSQLQuery()还是离不开对象操作。
session.createQuery(...HQL语句...),当然不能出现数据库的东西了,因为HQL是面向对象的查询语句。
不明白LZ为什么会问这样的问题?

#27


不可以,你如果那样写就成了原生sql语句,然而,你如果要用原生sql语句,那么,操作并不是和jdbc的sql语句一样的,它在查询时还要把对象的属性加上去。

#28


可以

#29


别人要实现的方法是hibernate本身不自带的方法,你 save(),有个什么用?
我现在也在做SSH项目  所有方法都是自己用hql写  ,麻烦死

#30


哪位高手说明白一点可以吗!!!小弟也是刚弄这!!感觉比ASP.NET 复杂多了!!
烦啊!!!!

#31


直接把HQL轉化成SQL語句就可以像LZ那樣進行添加了。。。。
HIBERNATE可以轉

#32


一般都是使用createSQLQuery()这个方法实现。
我有个疑问怎么将hibernate生成的sql语句写到数据库呢??
正在解决中

#33


直接引用save吧
j2ee技术群:24739115

#34


直接操作对象就ok了,你不用的属性为空就行了啊

#35


引用 32 楼 javaalpha 的回复:
一般都是使用createSQLQuery()这个方法实现。
 我有个疑问怎么将hibernate生成的sql语句写到数据库呢??
 正在解决中

朋友我好像看到你提的問題有人發貼~~這個不好弄

#36


用Hql也有好处。当你要对多个表进行插入时一条Hql就可解决了,如果你用Hibernate里面的save那样只会降低了性能。

#37


一般是 insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ..." 这么写的。hql 只支持INSERT INTO ... SELECT ...形式,不支持INSERT INTO ... VALUES ...形式.

#38


楼主应该是考虑性能测试,save和hql都能实现,hql估计不能关联插入。

#39


不可以...

#40


用 save挺好的直接插入了就

#41


那么多人说了半天都没有解决楼主所提问题,我来直接回复楼主吧:
使用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实现

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

#42


楼主是想写个批量插入数据,而且不想用hibernate的save来操作,因为save来操作这里是很麻烦的,因为save只能保存一个对像,要是这个对像过多的话,而且每个对像的数据都有所不一样,用save就每花大量的时间来处理对像了,所以还不如直接来操作数据库,所以会想到用insert into来解决这问题。不过hibernate hql不支持这种insert 就像上楼说的那样。
个人建议用事务来处理,用SQLQuery 原生态sql来写这里,就能解决你的问题了
SQLQuery query=session.createSQLQuery("insert into youtable (username,password,email) values(?,?,?)");

#43


insert是可以用的,如果想要用sql
可以session.createSQLQuery("insert into ...")

#44


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

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


正解

#45


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

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


正解。  以前也犯过同样的错误,至今不明白原因.太感谢了!

#46


说下我的意见,hibernate 的(Hql)一些对对象方法不是所有的都可以实现的,例如:多表之间的查询,而且各表之间又有关系,而且要的数据也很复杂!这里用hibernate 封装好的对对象使用的方法,根本没有办法实现,这时就会用的 sql语句来完成,用到Hbiernate的 createSQLQuery()来实现,不过此方法查询回来的结果,类型需要转换,才方便使用  返回的类型是 List<Object[]> 的类型,取的时候循环遍历 取值。可以放在自己预定好的Vo类中!为方法显示!     

#47


否试过,一般都是用save(xxxx);