HQL 删除问题
HibernateUtil hibera=new HibernateUtil();
Session session=hibera.currentSession();
Transaction tx=session.beginTransaction();
String id =(String) request.getParameter( "plane_id ");
String sql= "delete Plane p where p.id=id ";
Query query = session.createQuery(sql);
query.executeUpdate();
tx.commit();
执行后报
hibernate.QueryException: query must begin with SELECT or FROM: delete [delete ems.hibernate.Plane p where p.id=id ]
at org.hibernate.hql.classic.ClauseParser.token(ClauseParser.java:83)
at org.hibernate.hql.classic.PreprocessingParser.token(PreprocessingParser.java:108)
at org.hibernate.hql.classic.ParserHelper.parse(ParserHelper.java:28)
at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:191)
at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:167)
at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.(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 ems.struts.DeletePlaneAction.execute(DeletePlaneAction.java:25)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1072)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6981)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
[解决办法]
晕,是你的HQL语句参数没有绑定。
应该为:
String id =(String) request.getParameter( "plane_id ");
String sql= "delete Plane p where p.id=:id ";
Query query = session.createQuery(sql);
query.setString( "id ",id);
query.executeUpdate();
[解决办法]
delete Plane p where p.id=:id
delete Plane as p where p.id=:id 加个as试下
[解决办法]
根据id把对象取出来然后用delete方法删除
[解决办法]
楼上正解,先根据id把其对应的对象集合取出来,然后在delete(Plane plane)
[解决办法]
HibernateUtil hibera=new HibernateUtil();
Session session=hibera.currentSession();
Transaction tx=session.beginTransaction();
String id =(String) request.getParameter( "plane_id ");
String hql= "delete from Plane p where p.id=:id ";
Query query =session.createQuery(sql)
query.setString( "id ",id);
query.executeUpdate();
tx.commit();
[解决办法]
public void delPlane(int id){
HibernateUtil hibera=new HibernateUtil();
Session session=hibera.currentSession();
Transaction tx=session.beginTransaction();
Plane p=(Plane)session.load(Plane.class, new Integer(id));
session.delete(p);
session.flush();
tx.commit();
session.close();
}
[解决办法]
hibernate.QueryException: query must begin with SELECT or FROM
很明显, query 类是用来执行查询之类的功能, 所以不能执行delete语句
[解决办法]
楼主怎么还没有结贴呀!
时间可是不短了!
可以这样写:
Plane plane = (Plane)session.get(Plane.class,id); session.delete(plane);