简体   繁体   English

当我尝试将带有 hibernate 的字段插入表中时出错

[英]Error when I try to insert fields with hibernate into a table

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statement 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.Z80791B3AE70 javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statement 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:6607servlet.B)3AE. 02CB88C246876D9FAA8F8Z.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 02CB88C246876D9FAA8F8Z.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Root Cause:根本原因:

org.hibernate.exception.SQLGrammarException: could not execute statement 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.N org.hibernate.exception.SQLGrammarException: could not execute statement 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.N ativeSQLQueryPlan.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(HttpSe ativeSQLQueryPlan.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 rvlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) rvlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Root Cause:根本原因:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'pepsi' in 'field list' java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 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 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'pepsi' in 'field list' java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 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) ZC4CD5Z36D9AFEDB01 .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.Z93F725A074 .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.Z93F725A074 23FE1C889F448B33D21F46Z: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) Z4D236D9A2D102C5FE6 23FE1C889F448B33D21F46Z: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) Z4D236D9A2D102C5FE6 AD1C50DA4BEC50Z.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.Z93F725A07423 AD1C50DA4BEC50Z.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.执行更新(AbstractProducedQuery.java:1608)Util.SQLControl.insertOrderLine(SQLControl.Z93F725A07423 FE1C889F448B33D21F46Z: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) FE1C889F448B33D21F46Z: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)

Note The full stack trace of the root cause is available in the server logs.注意服务器日志中提供了根本原因的完整堆栈跟踪。

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();
   }

You dont seem to be setting the columns to insert your values into, when you execute an insert query you need to specify exactly which columns to insert into, like so您似乎没有设置要插入值的列,当您执行插入查询时,您需要准确指定要插入的列,如下所示

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

Im guessing thatws why hibernate is complaining about unknown columns.我猜这就是 hibernate 抱怨未知列的原因。 just guessing from your input parameters i imagine your query will need to look like this:只是从您的输入参数猜测我想您的查询将需要如下所示:

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

Also for complex queries i suggest storing them within a sql file, this just makes editing easier and makes the code a bit neater.同样对于复杂的查询,我建议将它们存储在 sql 文件中,这只会使编辑更容易并使代码更整洁。 then just load the sql file as a string.然后只需将 sql 文件作为字符串加载。

An even easier method to save in hibernate would just be to create an entity object, (create a class then annotate with @Entity ).保存在 hibernate 中的更简单的方法是创建一个实体 object,(创建一个 class 然后用@Entity注释)。 Hibernate will then save this object for you avoiding the need for native update queries!然后 Hibernate 将保存此 object 为您避免本机更新查询的需要!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 当我尝试将休眠与检票口一起使用时出错 - Error when I try to use hibernate with wicket 当我尝试创建插入查询时如何使用休眠@EmbeddedId - how to use hibernate @EmbeddedId when i try to create insert query 当我尝试在子表中插入多个数据时发生错误无法执行JDBC批更新 - When I try to insert multiple data into child table then error occurs Could not execute JDBC batch update 当我尝试用数据填充表时出现错误 - error when I try to fill table with data 当我尝试将数据插入 sqlte 时发生错误 - error occured when I try to insert data into sqlte 当我尝试在 SQLite Android Studio 上进行插入时出错 - error when i try to do an insert on SQLite Android Studio 当我尝试在数据库中插入数据时,“ org.hibernate.PersistentObjectException:分离的实体传递给持久化对象” - “org.hibernate.PersistentObjectException: detached entity passed to persist” when I try insert data in the database 当我尝试在数据库中插入数据时遇到异常“ org.hibernate.PersistentObjectException:分离的实体传递给持久对象” - Facing exception “org.hibernate.PersistentObjectException: detached entity passed to persist” when I try insert data in the database 我尝试在mysql表中插入数据 - I am try to insert data in mysql table 在冬眠中插入表中选择错误 - Error in Insert into select from table in hibernate
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM