[英]Spring hibernate: org.hibernate.exception.SQLGrammarException
My DAO layer code is as follows: 我的DAO层代码如下:
package com.app.dao;
import javax.annotation.Resource;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import com.app.pojo.InterviewerPojo;
@Repository("interviewer_details_dao")
public class InterviewerDetailsDaoImpl implements InterviewerDetailsDao {
@Resource(name="sessionFactory")
private SessionFactory factory;
/*private HibernateTemplate template;
public void setSessionFactory(){
template = new HibernateTemplate(factory);
}*/
/*private HibernateTemplate template = new HibernateTemplate(sessionFactory);*/
@Override
public void saveInterviewDetails(InterviewerPojo interviewerPojo) {
/* Session sess = factory.getCurrentSession();
try{
sess.getTransaction().wasCommitted();
Transaction trans = sess.beginTransaction();
System.out.println("a");
sess.saveOrUpdate(interviewerPojo);
sess.getTransaction().commit();}
catch(Exception e){
throw e;
}*/
System.out.println("b");
factory.getCurrentSession().save(interviewerPojo);
/* System.out.println(interviewerPojo);
template.saveOrUpdate(interviewerPojo);
System.out.println("b");*/
System.out.println("done");
}
}
the same code as above was running if i am getting the values from database as follows sessionFactory.getCurrentSession().createQuery("select m from emp m).list; But as I writing another page to insert values then it is having problem * As you can see i used same concept, I populated MODEL(POJO) class by another MODEL(pojo) which i have taken from database by above query * and now debugging goes upto "template.saveOrUpdate" and throws exception as follows 如果我要从数据库中获取值,则运行与上述相同的代码,如下所示: sessionFactory.getCurrentSession()。createQuery(“从emp m中选择m).list; 但是,当我编写另一页来插入值时,则出现了问题 * 如您所见,我使用了相同的概念,我通过上面的查询 * 从数据库获取的另一个MODEL(pojo)填充了MODEL(POJO)类 ,现在调试升至“ template.saveOrUpdate”并抛出异常,如下所示
org.hibernate.exception.SQLGrammarException: You have an error in your SQL syntax;
org.hibernate.exception.SQLGrammarException:您的SQL语法有错误。 check the manual that corresponds to your MySQL server version for the right syntax to use near 'value for hibernate_sequence' at line 1 at org.hibernate.exception.internal.SQLStateConverter.convert(SQLStateConverter.java:100) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) at $Proxy24.executeQuery(Unknown Source) at org.hibernate.id.SequenceGenerator.generateHolder(SequenceGenerator.java:112) at org.hibernate.id.SequenceHiLoGenerator$1.getNextValue(SequenceHiLoGenerator.java:85) at org.hibernate.id.enhanced.OptimizerFactory$LegacyHiLoAlgorithmOptimizer.generate(OptimizerFactory.java:350) at org.hibernate.id.SequenceHiLoGenerat
检查与您的MySQL服务器版本对应的手册以获取正确的语法,以在org.hibernate.engine的org.hibernate.exception.internal.SQLStateConverter.convert(SQLStateConverter.java:100)的第1行附近使用“ hibernate_sequence的值” org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)上的org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler上的.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)处的.continueInvocation(AbstractStatementProxyHandler.java:129)在org.hibernate.id.SequenceGenerator处的$ Proxy24.executeQuery(Unknown Source)处。 org.hibernate.id.SequenceHiLoGenerator $ 1.getNextValue(SequenceHiLoGenerator.java:85)的org.hibernate.id.enhanced.OptimizerFactory $ LegacyHiLoAlgorithmOptimizer.generate(OptimizerFactory.java:350)的generateHolder(SequenceGenerator.java:112) hibernate.id.SequenceHiLoGenerat or.generate(SequenceHiLoGenerator.java:82) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:642) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:635) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:631) at com.app.dao.Interview
org.org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120)或org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204)处的generate(SequenceHiLoGenerator.java:82) .hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)位于org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189)位于org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate( .java:49),位于org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90),位于org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:642),位于org.hibernate.internal.SessionImpl。在com.app.dao.Interview上的org.hibernate.internal.SessionImpl.save(SessionImpl.java:631)处保存(SessionImpl.java:635) erDetailsDaoImpl.saveInterviewDetails(InterviewerDetailsDaoImpl.java:40) at com.app.service.SaveInterviewerDetailsServiceImpl.saveDetails(SaveInterviewerDetailsServiceImpl.java:25) 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.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework
com.app.service.SaveInterviewerDetailsServiceImpl.saveDetails(SaveInterviewerDetailsServiceImpl.java:25)处的erDetailsDaoImpl.saveInterviewDetails(InterviewerDetailsDaoImpl.java:40)在sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)处在sun.reflect.NativeMethodAccessorImpl.Invoke0(Native Method) )处org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)处java.lang.reflect.Method.invoke(未知源)处sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)上的.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java :110)org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework.aop.framework .JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at $Proxy19.saveDetails(Unknown Source) at com.app.controllers.EmployeePromoteController.validateDetails(EmployeePromoteController.java:67) 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.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) at org.springframework.web.servlet.mvc.method.annotat
.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)位于$ Proxy19.saveDetails(未知源)位于com.app.controllers.EmployeePromoteController.validateDetails(EmployeePromoteController.java:67)位于sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法) org.springframework.web.method.support.InvocableHandlerMethod处java.lang.reflect.Method.invoke处sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)处的sun.reflect.NativeMethodAccessorImpl.invoke(未知源)。 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod。 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)的org.springframework.web.servlet.mvc.method.annotat的java:96) ion.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 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.doPost(FrameworkServlet.java:789) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalin
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.org)上的ion.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)。 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)的org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)的org.springframework.web.servlet的java:923) org.apache中的javax.servlet.http.HttpServlet.service(HttpServlet.java:647)处的.FrameworkServlet.doPost(FrameworkServlet.java:789)在javax.servlet.http.HttpServlet.service(HttpServlet.java:728)处位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)的catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 222),网址为org.apache.catalin a.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(U
org.apache.catalina.authalicator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)的org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:的a.core.StandardContextValve.invoke(StandardContextValve.java:123) 171)在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931)在org.apache.catalina.valves.AccessLogValve.invoke(AccessReportValve.java:931)在org.apache.catalina.core.StandardEngineValve org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)的org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)的.invoke(StandardEngineValve.java:118) org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:312)处的apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)在java.util.concurrent.ThreadPoolExecutor.runWorker( java.util.concurrent.ThreadPoolExecutor $ Worker.run(U上的未知源)(U.java.lang.Thread.run(U上的未知源) nknown Source) Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;
原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误; check the manual that corresponds to your MySQL server version for the right syntax to use near 'value for hibernate_sequence' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:407) at com.mysql.jdbc.Util.getInstance(Util.java:382) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2111) at com.mysql.jdbc.
检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native方法)的sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native方法)的第1行附近使用“ hibernate_sequence的值” sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知源)位于com.mysql.jdbc.Util.handleNewInstance(Util.java:407)处的com.mysql.jdbc.Util.handleNewInstance(Util.java:407)处的java.lang.reflect.Constructor.newInstance(未知源) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)处com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)处的.getInstance(Util.java:382)。 com.mysql.jdbc上的MysqlIO.checkErrorPacket(MysqlIO.java:3525)com.mysql.jdbc上的MysqlIO.sendCommand(MysqlIO.java:1986)com.mysql.jdbc上的com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2111)的com.mysql.jdbc的.ConnectionImpl.execSQL(ConnectionImpl.java:2626) PreparedStatement.executeQuery(PreparedStatement.java:2273) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) 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.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) ... 61 more
位于org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)的PreparedStatement.executeQuery(PreparedStatement.java:2273)位于org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement处)。 .reflect.NativeMethodAccessorImpl.invoke0(本机方法)(位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源),位于java.lang.reflect.Method.invoke(未知源)处的sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源) .hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)... 61更多
POJO source code: POJO源代码:
package com.app.pojo;
import java.io.Serializable;
import javax.persistence.*;
@SuppressWarnings("serial")
@Entity @Table(name="interviewer")
public class InterviewerPojo implements Serializable {
private int eid;
private int vid;
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
private int i_eid;
private String i_name;
private String password;
public int getEid() {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
}
Hibernate config: 休眠配置:
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.formatsql">true</prop>
<prop key="hibernate.showsql">true</prop>
<prop key="hibernate.hbm2ddl.auto">validate</prop>
</props>
</property>
In your error log, it showed that you're using MySQL. 在错误日志中,它表明您正在使用MySQL。 However, you configured Hibernate dialect was HSQLDialect.
但是,您配置的Hibernate方言是HSQLDialect。
org.hibernate.dialect.HSQLDialect
org.hibernate.dialect.HSQLDialect
You should remove this dialect property, Hibernate can automatically detect the right dialect through JDBC driver. 您应该删除该方言属性,Hibernate可以通过JDBC驱动程序自动检测正确的方言。 Or you modify to the correct dialect on your own.
或者您自己修改为正确的方言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.