怎么在hibernate 中执行一个update的sql语句?

时间:2021-08-10 00:39:46
请问 怎么在hibernate 中执行一个update的sql语句?
sql是更新一个字段的update 语句:
SQLQuery sQLQuery=sess.createSQLQuery(sql);
sQLQuery.executeUpdate();
用这个不行.
请问怎么实现??

27 个解决方案

#1


saveOrUpdate方法

#2


关健是我想执行我写的sql语句

#3


没人帮忙啊??

#4


我也碰到这样的问题?public void sjbmbupdate(DbXtwhSjbmb sjbm){
     //DbXtwhSjbmb sjbm=new DbXtwhSjbmb();
     try{
     String hsql="update DbXtwhSjbmb as a "
     +"set a.ac002='"
     +sjbm.getAc002()
     +"',a.ac003='"
     +sjbm.getAc003()
     +"',a.ac004='"
     +sjbm.getAc004()+"' "
     +"where a.ac001='00'";
     System.out.println("java hsql report ; "+hsql);
     getHibernateTemplate().update(hsql);
     //etHibernateTemplate().update(sjbm);
     System.out.println("java hsql report : successful");
     }catch(Exception e){
     System.out.println(e);
     }
    }
--------------------------------------------------------------
java hsql report ; update DbXtwhSjbmb as a set a.ac002='管理平台',a.ac003='0003',a.ac004='000000' where a.ac001='00'
org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.String; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.String
应该如何写 请大家帮忙 我可以给分的

#5


public void sjbmbupdate(String a){
List list = (List)this.getHibernateTemplate().find("from DbXtwhSjbmb where ac001=?",a);
DbXtwhSjbmb sjbm = (DbXtwhSjbmb )list.get(0);
sjbm.setAc002("管理平台者");
sjbm.setAc003("0003");
.
.
.
this.getHibernateTemplate().update(sjbm);
}

#6


To: ok60000 () 

public Collection findBySQL(String sql){
   Session session = null;
   Transaction tran = null;
   Collection list = null;
   try {
     session = sessionFactory.openSession();
     tran = session.beginTransaction();
     SQLQuery sq = session.createSQLQuery(sql);
     sq.addEntity(Student.class);
     list = sq.list();
     tran.commit();
   } catch (HibernateException e) {
     e.printStackTrace();
     tran.rollback();
   }finally{
     if(session!=null)
     session.close();
   }
   return list;
}

#7


Hibernage中不是有个
session.update(Object object) 吗?

#8


@windyt() :
=================
你这里是find的查询语句, 你尝试着写一些delete from *** 这样的update的sql语句看能不能执行?

#9


hibernate都是执行hql语句,再给你找找

#10


在native SQL里,每个字段的类型(HibernateType)都必须被定义

参考org.hibernate.SQLQuery接口

#11


楼主写那两句看不出来错,请给更多代码和出错信息.

#12


如果你没有Mapping Object的话 那是没指望了

自己把这个方法改成JDBC方式吧

#13


哦,是哦。直接用SqlQuery好像不能直接执行 增 删 改 操作,不过,我找了一下,下面的方法可以的。

trans = session.beginTransaction();
Connection conn = session.connection();
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.executeUpdate();
stmt.execute();
trans.commit();

#14


如果您不愿意用saveOrUpdate()或update()方法,我想只有楼上windyt的方法了。

#15


5楼正解  老大  hibernate最好对对象进行操作  
   hibernate你还玩sql?不是吧 那你用hibernate还有什么含义!!!

#16


hibernate 可以直接用sql,
如果直接用sql需要返回实体,可以直接指定对应的应体,
用sql与用对象操作是hibernate的一个对jdbc系统转移到hibernate时的一个功能.
非常不错

#17


15楼此话差矣,对于有些复杂的查询是无法用hql的,只能用sql来处理

#18



trans = session.beginTransaction();
trans.begin();
SQLQuery sQLQuery=session.createSQLQuery(sql);
sQLQuery.executeUpdate(); 
trans.commit();

#19


hql是面向对象的

#20


SQLQuery sQLQuery=session.createSQLQuery(sql);
sQLQuery.executeUpdate(); 

#21


引用 20 楼 niu90 的回复:
SQLQuery sQLQuery=session.createSQLQuery(sql);
sQLQuery.executeUpdate();

+1

#22


5楼说的对,我也采用了他的方法,可是新问题出现 了,这样做需要对这条记录的所有字段进行update,就是:“
sjbm.setAc002( "管理平台者 "); 
sjbm.setAc003( "0003 "); 


.”
程序到了这:“Hibernate: update User1 set address=?, age=?, email=?, gradeId=?, isOnline=?, latestDate=?, nickName=?, passwd=?, passwdAnswer=?, passwdQuestion=?, phone=?, point=?, provinceCity=?, referrer=?, registerDate=?, sex=?, status=? where id=?
”又进行不下去了,这个新问题怎么解决?

#23


executeUpdate()如果我没记错的话,它好像只能进行查询,对于删除、修改、新增都没用吧!

#24


解决办法很简单,在hibernate映射文件中加入节点<sql-query>,如:
<sql-query name="testQuery">
   insert into t_d_test values('1','1')
</sql-query>
在程序中先获取到这个sql,然后执行就行了,如:
String sql = session.getNamedQuery("testQuery").getQueryString();
Query query = session.createSQLQuery(sql);
query.executeUpdate();

#25


解决办法很简单,在hibernate映射文件中加入节点<sql-query>,如:
<sql-query name="testQuery">
   insert into t_d_test values('1','1')
</sql-query>
在程序中先获取到这个sql,然后执行就行了,如:
String sql = session.getNamedQuery("testQuery").getQueryString();
Query query = session.createSQLQuery(sql);
query.executeUpdate();

#26


你这样写应该是可以update的,创建的就是SQL不是HQL。 是不是其他什么出了问题

#27


没有提交事务吧。

#1


saveOrUpdate方法

#2


关健是我想执行我写的sql语句

#3


没人帮忙啊??

#4


我也碰到这样的问题?public void sjbmbupdate(DbXtwhSjbmb sjbm){
     //DbXtwhSjbmb sjbm=new DbXtwhSjbmb();
     try{
     String hsql="update DbXtwhSjbmb as a "
     +"set a.ac002='"
     +sjbm.getAc002()
     +"',a.ac003='"
     +sjbm.getAc003()
     +"',a.ac004='"
     +sjbm.getAc004()+"' "
     +"where a.ac001='00'";
     System.out.println("java hsql report ; "+hsql);
     getHibernateTemplate().update(hsql);
     //etHibernateTemplate().update(sjbm);
     System.out.println("java hsql report : successful");
     }catch(Exception e){
     System.out.println(e);
     }
    }
--------------------------------------------------------------
java hsql report ; update DbXtwhSjbmb as a set a.ac002='管理平台',a.ac003='0003',a.ac004='000000' where a.ac001='00'
org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.String; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.String
应该如何写 请大家帮忙 我可以给分的

#5


public void sjbmbupdate(String a){
List list = (List)this.getHibernateTemplate().find("from DbXtwhSjbmb where ac001=?",a);
DbXtwhSjbmb sjbm = (DbXtwhSjbmb )list.get(0);
sjbm.setAc002("管理平台者");
sjbm.setAc003("0003");
.
.
.
this.getHibernateTemplate().update(sjbm);
}

#6


To: ok60000 () 

public Collection findBySQL(String sql){
   Session session = null;
   Transaction tran = null;
   Collection list = null;
   try {
     session = sessionFactory.openSession();
     tran = session.beginTransaction();
     SQLQuery sq = session.createSQLQuery(sql);
     sq.addEntity(Student.class);
     list = sq.list();
     tran.commit();
   } catch (HibernateException e) {
     e.printStackTrace();
     tran.rollback();
   }finally{
     if(session!=null)
     session.close();
   }
   return list;
}

#7


Hibernage中不是有个
session.update(Object object) 吗?

#8


@windyt() :
=================
你这里是find的查询语句, 你尝试着写一些delete from *** 这样的update的sql语句看能不能执行?

#9


hibernate都是执行hql语句,再给你找找

#10


在native SQL里,每个字段的类型(HibernateType)都必须被定义

参考org.hibernate.SQLQuery接口

#11


楼主写那两句看不出来错,请给更多代码和出错信息.

#12


如果你没有Mapping Object的话 那是没指望了

自己把这个方法改成JDBC方式吧

#13


哦,是哦。直接用SqlQuery好像不能直接执行 增 删 改 操作,不过,我找了一下,下面的方法可以的。

trans = session.beginTransaction();
Connection conn = session.connection();
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.executeUpdate();
stmt.execute();
trans.commit();

#14


如果您不愿意用saveOrUpdate()或update()方法,我想只有楼上windyt的方法了。

#15


5楼正解  老大  hibernate最好对对象进行操作  
   hibernate你还玩sql?不是吧 那你用hibernate还有什么含义!!!

#16


hibernate 可以直接用sql,
如果直接用sql需要返回实体,可以直接指定对应的应体,
用sql与用对象操作是hibernate的一个对jdbc系统转移到hibernate时的一个功能.
非常不错

#17


15楼此话差矣,对于有些复杂的查询是无法用hql的,只能用sql来处理

#18



trans = session.beginTransaction();
trans.begin();
SQLQuery sQLQuery=session.createSQLQuery(sql);
sQLQuery.executeUpdate(); 
trans.commit();

#19


hql是面向对象的

#20


SQLQuery sQLQuery=session.createSQLQuery(sql);
sQLQuery.executeUpdate(); 

#21


引用 20 楼 niu90 的回复:
SQLQuery sQLQuery=session.createSQLQuery(sql);
sQLQuery.executeUpdate();

+1

#22


5楼说的对,我也采用了他的方法,可是新问题出现 了,这样做需要对这条记录的所有字段进行update,就是:“
sjbm.setAc002( "管理平台者 "); 
sjbm.setAc003( "0003 "); 


.”
程序到了这:“Hibernate: update User1 set address=?, age=?, email=?, gradeId=?, isOnline=?, latestDate=?, nickName=?, passwd=?, passwdAnswer=?, passwdQuestion=?, phone=?, point=?, provinceCity=?, referrer=?, registerDate=?, sex=?, status=? where id=?
”又进行不下去了,这个新问题怎么解决?

#23


executeUpdate()如果我没记错的话,它好像只能进行查询,对于删除、修改、新增都没用吧!

#24


解决办法很简单,在hibernate映射文件中加入节点<sql-query>,如:
<sql-query name="testQuery">
   insert into t_d_test values('1','1')
</sql-query>
在程序中先获取到这个sql,然后执行就行了,如:
String sql = session.getNamedQuery("testQuery").getQueryString();
Query query = session.createSQLQuery(sql);
query.executeUpdate();

#25


解决办法很简单,在hibernate映射文件中加入节点<sql-query>,如:
<sql-query name="testQuery">
   insert into t_d_test values('1','1')
</sql-query>
在程序中先获取到这个sql,然后执行就行了,如:
String sql = session.getNamedQuery("testQuery").getQueryString();
Query query = session.createSQLQuery(sql);
query.executeUpdate();

#26


你这样写应该是可以update的,创建的就是SQL不是HQL。 是不是其他什么出了问题

#27


没有提交事务吧。