hibernate删除语句问题

lcc812 2008-05-05 11:43:19
数据库项含有,id,name,phone等信息,现知道不重复的name,根据name删除这一项纪录,主要代码如下,
com.adk.vo.Delete是一个类,包含了id,name,phone等的set get方法

String hql = "delete from com.adk.vo.Delete where name='"+ name + "'";
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session session = sf.openSession();
tx = session.beginTransaction();
Query q = session.createQuery(hql);
session.close();

运行无法删除,显示异常Not supported for DML operations
应该是hql写得不对吧,我想知道哪里错了。
...全文
2383 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nadirboxer 2008-05-05
  • 打赏
  • 举报
回复

Transaction tr=session.beginTransaction();

Session session = sf.openSession();
tx = session.beginTransaction();
Query q = session.createQuery(hql);

tr.commit();
这样应该就可以了
gongyali2005 2008-05-05
  • 打赏
  • 举报
回复
String hql = "delete from com.adk.vo.Delete where name='"+ name + "'";
;改成

String hql = "delete from Delete where name=?";
jacklee408 2008-05-05
  • 打赏
  • 举报
回复
String strsql = "delete from TPrintPaper where id = ?";

SessionFactory sf = null;
Session session = null;
Transaction tx = null;

try
{
sf = printPaperDAO.getSessionFactory();
session = sf.openSession();
tx = session.beginTransaction();
Query query = session.createQuery(strsql);
query.setLong(0, lngId);
query.executeUpdate();
tx.commit();
}
catch(Exception e)
{
tx.rollback();
e.printStackTrace();
return false;
}
finally
{
if( session != null && session.isOpen() )
session.close();

if( sf != null && !sf.isClosed() )
sf.close();
}
yojiwei 2008-05-05
  • 打赏
  • 举报
回复
query不是用来查询用的嘛,这样一来你都没有用到session里面的删除的方法。
你可以用QBC来处理。
lcc812 2008-05-05
  • 打赏
  • 举报
回复
按照楼上修改后,到可以删除数据库中的项,但是控制台显示异常错误:
Not supported for DML operations

这是什么原因呢,所有错误信息:
org.hibernate.HibernateException: Not supported for DML operations
at org.hibernate.hql.ast.QueryTranslatorImpl.errorIfDML(QueryTranslatorImpl.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:270)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:844)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at com.adk.DAOFactory.deleteData(DAOFactory.java:86)
at com.adk.struts.action.DeleteAction.execute(DeleteAction.java:55)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:834)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
at java.lang.Thread.run(Thread.java:595)
songsong8 2008-05-05
  • 打赏
  • 举报
回复
应该是HQL语句的问题把
你换个写法,用参数的形式写一下试试

67,538

社区成员

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

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