Ошибка вставки в спящий режим - PullRequest
0 голосов
/ 19 апреля 2020

Я использую Hibernate для сохранения записи в пользовательской таблице в базе данных mySQL.

Схема таблицы:

   CREATE TABLE `vihanga-database-1`.`user` (
  `user_id` VARCHAR(255) NOT NULL,
  `google_id` VARCHAR(255) NOT NULL,
  `email_id` VARCHAR(255) NOT NULL,
  `flat` INT NOT NULL,
  `block` VARCHAR(45) NOT NULL,
  `society` VARCHAR(45) NOT NULL,
  `first_name` VARCHAR(45) NOT NULL,
  `last_name` VARCHAR(45) NOT NULL,
  `blob` VARCHAR(8000) NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE INDEX `google_id_UNIQUE` (`google_id` ASC) VISIBLE,
  UNIQUE INDEX `email_id_UNIQUE` (`email_id` ASC) VISIBLE);

У меня есть пользовательский объект, который выглядит следующим образом:

    @Entity
    @Builder
    @Table(name = "User")
    @AllArgsConstructor
    @NoArgsConstructor
    @EqualsAndHashCode
    @ToString
    public class UserEntity  {

        @Id
        String userId;
        @Column(unique = true)
        private String emailId;
        private String block;
        private Integer flat;
        private String society;
        private String firstName;
        private String lastName;
        @Column(unique = true)
        private String googleId;
        private String blob ;

      //omitted getter/setter for clarity. 
}

Я сохраняю следующую информацию:

UserEntitiy:UserEntity(userId=name041011587317844899, emailId=bhaxxxx@gmail.com, block=04, flat=101, society=name, firstName=Bharat, lastName=Verma, googleId=user---id, blob=sdagsdg)

Наблюдение за следующими журналами:

2020-04-19 23:07:25,110 DEBUG org.hibernate.SQL [https-jsse-nio-8081-exec-6]
    insert
    into
        user
        (blob, block, email_id, first_name, flat, google_id, last_name, society, user_id)
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?)
2020-04-19 23:07:25,112 TRACE org.hibernate.type.descriptor.sql.BasicBinder [https-jsse-nio-8081-exec-6] binding parameter [1] as [VARCHAR] - [sdagsdg]
2020-04-19 23:07:25,113 TRACE org.hibernate.type.descriptor.sql.BasicBinder [https-jsse-nio-8081-exec-6] binding parameter [2] as [VARCHAR] - [04]
2020-04-19 23:07:25,117 TRACE org.hibernate.type.descriptor.sql.BasicBinder [https-jsse-nio-8081-exec-6] binding parameter [3] as [VARCHAR] - [bhaxxxx@gmail.com]
2020-04-19 23:07:25,118 TRACE org.hibernate.type.descriptor.sql.BasicBinder [https-jsse-nio-8081-exec-6] binding parameter [4] as [VARCHAR] - [Bharat]
2020-04-19 23:07:25,120 TRACE org.hibernate.type.descriptor.sql.BasicBinder [https-jsse-nio-8081-exec-6] binding parameter [5] as [INTEGER] - [101]
2020-04-19 23:07:25,120 TRACE org.hibernate.type.descriptor.sql.BasicBinder [https-jsse-nio-8081-exec-6] binding parameter [6] as [VARCHAR] - [user---id]
2020-04-19 23:07:25,121 TRACE org.hibernate.type.descriptor.sql.BasicBinder [https-jsse-nio-8081-exec-6] binding parameter [7] as [VARCHAR] - [Verma]
2020-04-19 23:07:25,121 TRACE org.hibernate.type.descriptor.sql.BasicBinder [https-jsse-nio-8081-exec-6] binding parameter [8] as [VARCHAR] - [name]
2020-04-19 23:07:25,121 TRACE org.hibernate.type.descriptor.sql.BasicBinder [https-jsse-nio-8081-exec-6] binding parameter [9] as [VARCHAR] - [name041011587317844899]
2020-04-19 23:07:25,163 ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper [https-jsse-nio-8081-exec-6] 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 'blob, block, email_id, first_name, flat, google_id, last_name, society, user_id)' at line 1
2020-04-19 23:07:25,188 ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] [https-jsse-nio-8081-exec-6] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement] with root cause
java.sql.SQLSyntaxErrorException: 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 'blob, block, email_id, first_name, flat, google_id, last_name, society, user_id)' at line 1
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092)
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040)
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347)
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025)
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3226)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3751)
    at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:91)
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)
    at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478)
    at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475)
    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:348)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:40)
    at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:108)
    at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1344)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:435)
    at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3221)
    at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2389)
    at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:447)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:183)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:40)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:281)
    at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:101)
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:534)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:744)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:712)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:631)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:385)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:178)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    at com.sun.proxy.$Proxy89.save(Unknown Source)
    at com.tokenservice.myhome.manager.UserManager.registerOrLogin(UserManager.java:27)
    at com.tokenservice.myhome.controller.LoginController.login(LoginController.java:41)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardCon

Пожалуйста, помогите мне узнать, что я делаю неправильно. Это первый раз, когда я использую hibernate и Springboot. Я использую репо JPA.

Ответы [ 2 ]

3 голосов
/ 19 апреля 2020

Возможно, вы пытаетесь использовать любое зарезервированное слово MySQL.

Установите для свойства hibernate.globally_quoted_identifiers значение true в файле конфигурации (например, application.properties). Тогда все идентификаторы базы данных будут заключены в кавычки.

hibernate.globally_quoted_identifiers=true
1 голос
/ 19 апреля 2020

Попробуйте изменить blob атрибут имени из вашей сущности на что-то вроде private String picture. Как сказала @ Abina sh, вы используете зарезервированное ключевое слово

Для получения дополнительной информации https://dev.mysql.com/doc/refman/8.0/en/keywords.html

...