2012-08-16 39 views
1

我不再看到我在犯我的错误的地方。使用Spring 3和Hibernate以及Mysql到目前为止工作得很好,并且没问题,但是在这一个上它不起作用。MySQLSyntaxErrorException:您的SQL语法中有错误

这是我的课:

@Entity 
@Table(name = "order") 
@XmlRootElement(name = "order") 
public class Order implements java.io.Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "idOrder", length = 11) 
    private int id; 

    @Column(name = "latitude", nullable = true, length = 45) 
    private String latitude; 

    @Column(name = "longitude", nullable = true, length = 45) 
    private String longitude; 

    @Column(name = "orderDate", length = 30) 
    @DateTimeFormat 
    private Date orderDate; 

    @Column(name = "city", nullable = true, length = 45) 
    private String city; 

    @Column(name = "country", nullable = true, length = 45) 
    private String country; 

    @Column(name = "street", nullable = true, length = 45) 
    private String street; 

    @Column(name = "streetNo", nullable = true, length = 45) 
    private String streetNo; 

    @Column(name = "created", length = 30) 
    @DateTimeFormat 
    private Date created; 

    @JoinColumn(name = "idTaxi") 
    @JoinTable(name= "taxi") 
    @Column(name = "idTaxi", length = 11) 
    private Integer idTaxi; 

    @Column(name = "orderstatus", nullable = false, length = 45) 
    private String orderstatus; 

    @Column(name = "clientname", nullable = true, length = 45) 
    private String clientName; 

    //public getters and setters 

} 

以dB为单位,我的表名是 “秩序”。我检查了所有字段的拼写错误。 在持久性XML配置文件:

[...] 
<property name="annotatedClasses"> 
    <list> 
      <value>test.bean.Taxi</value> 
      <value>test.bean.Order</value> 
    </list> 
</property> 
<property name="hibernateProperties"> 
    <props> 
     <prop key="hibernate.dialect"> 
      org.hibernate.dialect.MySQLDialect 
     </prop> 
     <prop key="hibernate.hbm2ddl.auto">create</prop> 
     <prop key="lazy">true</prop> 
     <prop key="hibernate.show_sql">true</prop> 
     <!-- Show and print nice SQL on stdout --> 
     <prop key="hibernate.format_sql">true</prop> 
     <prop key="hibernate.archive.autodetection">class</prop> 
    </props> 
</property> 
</bean> 
[...] 

在DAO类:

public List<Order> showAllOpenOrders() { 

    List<Order> history = new ArrayList<Order>(); 
    history = getHibernateTemplate().find("FROM Order o where o.orderstatus ='open'"); 

    return history; 
} 

我的错误:

SEVERE: Servlet.service() for servlet [] in context with path [/] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; SQL [select order0_.idOrder as idOrder1_, order0_.city as city1_, order0_.clientname as clientname1_, order0_.country as country1_, order0_.created as created1_, order0_.idTaxi as idTaxi1_, order0_.latitude as latitude1_, order0_.longitude as longitude1_, order0_.orderDate as orderDate1_, order0_.orderstatus as orderst10_1_, order0_.street as street1_, order0_.streetNo as streetNo1_ from order order0_ where order0_.orderstatus='open']; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query] with root cause 
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order order0_ where order0_.orderstatus='open'' at line 1 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
at com.mysql.jdbc.Connection.execSQL(Connection.java:3256) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313) 
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1448) 
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186) 
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787) 
at org.hibernate.loader.Loader.doQuery(Loader.java:674) 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 
at org.hibernate.loader.Loader.doList(Loader.java:2220) 
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) 
at org.hibernate.loader.Loader.list(Loader.java:2099) 
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378) 
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338) 
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172) 
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121) 
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79) 
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:921) 
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:1) 
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) 
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) 
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:912) 
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:904) 
at test.rest.persistence.OrderDAOImpl.showAllOpenOrders(OrderDAOImpl.java:154) 
at test.rest.services.OrderServiceImpl.showAllOpenOrders(OrderServiceImpl.java:109) 
at test.rest.controller.OrderController.showAllOrders(OrderController.java:97) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

我已经成功地映射另一个类(出租车),但是这一次..只是不行。我不明白为什么......你看到我不喜欢的东西? 所以我的数据库表是lowecase“订单”,并在我的班级顺序我映射该表。 但如果我尝试从数据库状态上设置访问的所有记录“开放”是这样的:

public List<Order> showAllOpenOrders() { 
    ; 
    List<Order> history = new ArrayList<Order>(); 
    history = getHibernateTemplate().find("FROM Order o where o.orderstatus ='" + TaxiStatus.OPEN + "'"); 

    return history; 
} 

我收到一个错误,有一个SQL例外。

谢谢你的时间。

回答

2

顺序 - 保留关键字在MySQL,而且必须是backquoted如果没有用作order by

重写的一部分,您的查询:

history = getHibernateTemplate().find("FROM `Order` o where o.orderstatus ='" + TaxiStatus.OPEN + "'"); 
+0

谢谢。这样一个愚蠢的错误,我没有看到名称的问题,即使我知道该命令是关键字。再次感谢你。其作品。 – 2012-08-16 14:02:48

相关问题