当我尝试将具有休眠状态的字段插入表中时发生错误

  

javax.persistence.PersistenceException:org.hibernate.exception.SQLGrammarException:无法执行语句       org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)       org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)       org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1617)       Util.SQLControl.insertOrderLine(SQLControl.java:66)       Servlet.ShoppingCardServlet.processRequest(ShoppingCardServlet.java:53)       Servlet.ShoppingCardServlet.doPost(ShoppingCardServlet.java:81)       javax.servlet.http.HttpServlet.service(HttpServlet.java:660)       javax.servlet.http.HttpServlet.service(HttpServlet.java:741)       org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

根本原因:

  

org.hibernate.exception.SQLGrammarException:无法执行语句       org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)       org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)       org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)       org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)       org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:178)       org.hibernate.engine.query.spi.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:107)       org.hibernate.internal.SessionImpl.executeNativeUpdate(SessionImpl.java:1632)       org.hibernate.query.internal.NativeQueryImpl.doExecuteUpdate(NativeQueryImpl.java:295)       org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1608)       Util.SQLControl.insertOrderLine(SQLControl.java:66)       Servlet.ShoppingCardServlet.processRequest(ShoppingCardServlet.java:53)       Servlet.ShoppingCardServlet.doPost(ShoppingCardServlet.java:81)       javax.servlet.http.HttpServlet.service(HttpServlet.java:660)       javax.servlet.http.HttpServlet.service(HttpServlet.java:741)       org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

根本原因:

  

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:“字段列表”中的未知列“ pepsi”       java.base / jdk.internal.reflect.NativeConstructoraccessorImpl.newInstance0(本机方法)       java.base / jdk.internal.reflect.NativeConstructoraccessorImpl.newInstance(NativeConstructoraccessorImpl.java:62)       java.base / jdk.internal.reflect.DelegatingConstructoraccessorImpl.newInstance(DelegatingConstructoraccessorImpl.java:45)       java.base / java.lang.reflect.Constructor.newInstance(Constructor.java:490)       com.mysql.jdbc.Util.handleNewInstance(Util.java:406)       com.mysql.jdbc.Util.getInstance(Util.java:381)       com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)       com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)       com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)       com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)       com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)       com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)       com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)       com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)       com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019)       com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937)       com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922)       org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175)       org.hibernate.engine.query.spi.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:107)       org.hibernate.internal.SessionImpl.executeNativeUpdate(SessionImpl.java:1632)       org.hibernate.query.internal.NativeQueryImpl.doExecuteUpdate(NativeQueryImpl.java:295)       org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1608)       Util.SQLControl.insertOrderLine(SQLControl.java:66)       Servlet.ShoppingCardServlet.processRequest(ShoppingCardServlet.java:53)       Servlet.ShoppingCardServlet.doPost(ShoppingCardServlet.java:81)       javax.servlet.http.HttpServlet.service(HttpServlet.java:660)       javax.servlet.http.HttpServlet.service(HttpServlet.java:741)       org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

注意在服务器日志中可以找到根本原因的完整堆栈跟踪。

public void insertOrderLine(String orderName,String tableId,String pID,String pName,String category,int quantity,int price,String date){

       Session session = HibernateUtil.getSessionFactory().openSession();
       session.beginTransaction();
       Query query =  session.createSQLQuery("INSERT INTO "+ orderName+" VALUES ("+tableId +","+ pID+","+pName +
               ","+category+","+quantity+ ","+ price+","+ date+")");
        int result = query.executeUpdate();
   }
zz315274061 回答:当我尝试将具有休眠状态的字段插入表中时发生错误

您似乎没有设置要插入值的列!当您执行插入查询时,您需要准确指定要插入的列,就像

INSERT INTO table([column1],[column1]) VALUES(value_for_col1,value_for_col2).

我在猜测为什么冬眠抱怨未知的列。只是从您的输入参数猜测,我想您的查询将需要像这样:

Query query =  session.createSQLQuery("INSERT INTO "+ orderName+" ([orderName],[tableId],[pID],[pName],[category],[quantity],[price],[date])VALUES ("+tableId +","+ pID+","+pName +
           ","+category+","+quantity+ ","+ price+","+ date+")");

对于复杂的查询,我建议将它们存储在sql文件中,这只会使编辑更加容易,并使代码更整洁。然后只需将sql文件作为字符串加载即可。

要保存到休眠状态,一种更简单的方法是创建一个实体对象(创建一个类,然后用@Entity进行注释)。然后,Hibernate将为您保存该对象,而无需进行本机更新查询!

本文链接:https://www.f2er.com/3123261.html

大家都在问