728x90
반응형
728x90
반응형
728x90
반응형

mysql 사용시 종종 겪을 수 있는 문제입니다.

해당 문제는 문법적인 에러이고, 아래 에러문에서 해당되는 문제는 condition 이라는 컬럼명을 사용했기 때문입니다.

 

 

* 에러 전문

20211108 14:20:51.623 [http-nio-8091-exec-6] ERROR j.sqltiming - com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)

1. insert into table_name (crt_by, crt_dt, del_by, del_dt, del_yn, upd_by, upd_dt, condition, menu_seq, model_nm) values (0, '11/08/2021 14:20:51.585', NULL, NULL, 'N', 0, '11/08/2021 14:20:51.585', 'Y', 57, 'AAAA')

{FAILED after 16 msec}

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 'condition, menu_seq, model_nm) values (0, '2021-11-08 14:20:51.585', null, null,' at line 1

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)

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 net.sf.log4jdbc.sql.jdbcapi.PreparedStatementSpy.executeUpdate(PreparedStatementSpy.java:1080)

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.dialect.identity.GetGeneratedKeysDelegate.executeAndExtract(GetGeneratedKeysDelegate.java:57)

at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:43)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3200)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3806)

at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:84)

at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:645)

at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:282)

at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:263)

at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:317)

at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:330)

at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287)

at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193)

at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:123)

at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:185)

at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:128)

at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55)

at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:93)

at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:720)

at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:706)

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.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362)

at com.sun.proxy.$Proxy89.persist(Unknown Source)

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.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311)

at com.sun.proxy.$Proxy89.persist(Unknown Source)

at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:557)

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.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289)

at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)

at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)

at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:524)

at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285)

at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:531)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:156)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:131)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)

at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)

at com.sun.proxy.$Proxy154.save(Unknown Source)

at packageName.front.webtools.service.WebtoolsService.insert(WebtoolsService.java:146)

at packageName.front.webtools.web.Controller.insert(Controller.java:71)

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.doInvoke(InvocableHandlerMethod.java:197)

at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)

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:894)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)

at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)

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:652)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

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:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

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:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

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:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Source)

20211108 14:20:51.625 [http-nio-8091-exec-6] WARN o.h.e.j.s.SqlExceptionHelper - SQL Error: 1064, SQLState: 42000

20211108 14:20:51.625 [http-nio-8091-exec-6] ERROR o.h.e.j.s.SqlExceptionHelper - 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 'condition, menu_seq, model_nm) values (0, '2021-11-08 14:20:51.585', null, null,' at line 1

20211108 14:20:51.646 [http-nio-8091-exec-6] ERROR c.d.b.c.a.ExceptionControllerAdvice -

org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement

at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:259)

at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:233)

at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:551)

at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)

at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)

at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:152)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)

at com.sun.proxy.$Proxy154.save(Unknown Source)

at packageName.front.webtools.service.WebtoolsService.insert(WebtoolsService.java:146)

at packageName.front.webtools.web.Controller.insert(Controller.java:71)

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.doInvoke(InvocableHandlerMethod.java:197)

at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)

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:894)

at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)

at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)

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:652)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

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:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

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:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

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:189)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)

at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)

at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)

at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684)

at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Source)

Caused by: org.hibernate.exception.SQLGrammarException: could not execute statement

at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)

at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)

at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)

at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)

at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:200)

at org.hibernate.dialect.identity.GetGeneratedKeysDelegate.executeAndExtract(GetGeneratedKeysDelegate.java:57)

at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:43)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3200)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3806)

at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:84)

at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:645)

at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:282)

at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:263)

at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:317)

at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:330)

at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287)

at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193)

at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:123)

at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:185)

at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:128)

at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55)

at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:93)

at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:720)

at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:706)

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.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362)

at com.sun.proxy.$Proxy89.persist(Unknown Source)

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.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311)

at com.sun.proxy.$Proxy89.persist(Unknown Source)

at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:557)

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.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289)

at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)

at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)

at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:524)

at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285)

at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:531)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:156)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:131)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)

at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)

... 59 more

Caused by: 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 'condition, menu_seq, model_nm) values (0, '2021-11-08 14:20:51.585', null, null,' at line 1

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)

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 net.sf.log4jdbc.sql.jdbcapi.PreparedStatementSpy.executeUpdate(PreparedStatementSpy.java:1080)

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)

... 112 more

- userMessage: null

- systemMessage: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement

- httpStatus: 500 INTERNAL_SERVER_ERROR

- code: null

 

 

 

 

 

728x90
반응형
728x90
반응형

검색엔진에서 내 사이트를 잘 찾게 만들기 위해서는 sitemap.xml, robots.txt가 필요하다.

내가 원했던건 컨트롤러에 의해 자동 생성된 것으로 리턴하는 것이다.

 

자동 생성하는 것은 아래 두개의 링크를 참고 했다.

 

[Spring] 스프링에서 sitemap.xml 및 robots.txt 처리하기

스프링 프레임워크로 사이트를 개발하여 sitemap 및 robots.txt 를 처리해야할 필요가 있을때 아래처럼 구성하면 유기적으로 관리가 가능합니다. sitemap.xml 에 신규 컨텐츠를 지속적으로 추가해주어

mytalkhome.tistory.com

 

spring boot sitemap 생성하기

참고  - site map 설명 링크 코드  - 참고 링크 @RestController public class TestController { @Autowired private RequestMappingHandlerMapping re; @GetMapping("/sitemap.xml") public String getSitemap(..

blog.eomsh.com

 

다만 이걸 적용 후 몇가지 문제가 있었다.

 

1. 최상단 태그가 ns2:urlset로 나왔다.

(이건 해결하고 검색엔진에 반영했기 때문에 실제 검색엔진에서 문제가 되는지 확인되지 않음.)

 

Build sitemap.xml by Java Spring

I'm building a sitemap.xml by Spring MVC @XmlRootElement(name = "urlset") public class XmlUrlSet{ @XmlElements(@XmlElement(name = "url", type = XmlUrl.class)) private List sitemap = ...

stackoverflow.com

위 링크의 정보를 따라서 적용하다보면 package-info.java를 추가 하라고 하는데 방법을 알 수 없었다.

추가하는 방법은 아래 링크 참고

 

팩키지 설명을 위한 package-info.java 파일 (v0.10)

팩키지 설명을 위한 package-info.java 파일

‘package-info.java’가 뭐야?

기본 Checkstyle 설정을 사용했더니 자바 파일마다 상단에 ‘Missing packag

 

egloos.zum.com

 

2. 구글 검색에서 sitemap 제출 시 에러 : 사이트맵을 읽을 수 있지만 오류가 있습니다. 지원하지 않는 파일 포맷

 

사이트맵을 읽을 수 있지만 오류가 있습니다. Sitemap이 HTML입니다. 라는 오류가 계속 뜹니다. 도와

 

support.google.com

 

답변 내용을 읽어보면 아래 링크에서 검사해 보면 원인을 찾아준다는 내용 이었다.

https://www.xml-sitemaps.com/validate-xml-sitemap.html

 

내 경우 검사해 본 결과 header의 content-type이 application/xml로 되어야 한다는 것 이었고, 

크롬에서 header 정보를 확인하는 방법은 아래 링크를 참조하자.

 

크롬에서 request, response header 확인하기.

1. 크롬에서 개발자도구를 시작해서 (F12를 누르면 열림) 2. Network 탭으로 이동합니다. 3. F5또는 Ctrl+R을 통해서 페이지를 새로고침합니다. 4. 그러면 name에 페이지요청 목록이 나오는데 원하는 것

paulaner80.tistory.com

그래서 결과적으로 컨트롤러에 produces = "application/xml;" 를 추가하여 sitemap.xml을 재출할 수 있었다.

728x90
반응형
728x90
반응형

특정 url을 특정서버 예를들면 운영서버에서는 사용하고 싶지 않았다.

하지만 그렇다고 주석처리는 싫다! 왜냐하면 그때 그때 주석처리를 하고 안하고 하면 실수가 있기 때문이다.

 

그래서 생각한 것은 아래와 같다.

1. application.properties의 값을 이용해 on/off 하는 방법을 찾는다.

2. 기존에 테스트서버와 운영서버 war를 동일한 파일로 했었는데 파일명을 다르게 하여 구분한다.

 

내 개발환경은 간단하게 아래와 같다.

1. spring boot 2.4.3

2. java 1.8

3. gradle 6.8.3

 

이제부터 적용한 내용이다!

시작하기에 앞서 application.properties는 서버별로 분리되어야 한다. (아래 링크 참조)

 

spring boot profile 설정 파일을 분리해 봅시다.

 spring으로 crud 하기 전에, 필요한 지식들을 먼저 보고 가겠습니다. spring boot 프로젝트를 보면, 왠 properties 파일들을 보게 됩니다. 이들은, 셋팅 파일인데요. 환경에 따라서, 이 값을 다르게 하고

codingdog.tistory.com

 

1. Controller 활성화, 비활성화 : @ConditionalOnExpression

 

Can a spring boot @RestController be enabled/disabled using properties?

Given a "standard" spring boot application with a @RestController, eg @RestController @RequestMapping(value = "foo", produces = "application/json;charset=UTF-8") public class MyController { @

stackoverflow.com

 

내가 적용한 샘플은 아래와 같다.

1) Controller에 @ConditionalOnExpression 사용 (4번라인)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
 
@ResController
@ConditionalOnExpression("${my.controller.enabled:false}")
public class SampleContoroller {
    
    @GetMapping(value = "/callUrl1")
    public String call1() {
        ....
    }
 
    @GetMapping(value = "/callUrl2")
    public String call2() {
        ....
    }
    
}
 
cs

2) 각각의 application.properties에 필요에 따라 my.controller.enabled 값 설정

1
2
# controller enabled/disabled : true/false or remove
my.controller.enabled=true
cs

이렇게 하면 설정에 맞춰 해당 컨트롤러를 활성화 할 수 있다.

 

2. war 파일 배포시 실수를 줄이기 위해 테스트서버, 운영서버 용 파일을 구분한다.

이것을 위해 application.properties의 spring.profiles.active 값을 build.gradle에서 읽어 war 파일명에 넣어 해결한다.

 

How to use spring properties in gradle.build?

How can I use properties configured in resources/application.properties in gradle.build? I would like to get something like this : flyway { url = MAP_WITH_PROPERTIES['spring.datasource.url'] ...

stackoverflow.com

 

1) build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// read application.properties values
import java.util.Properties
def props = new Properties()
file('src/main/resources/application.properties').withInputStream {
    props.load(it)
}
def active = props['spring.profiles.active']
 
....
 
// war file name custom
version = '0.0.1-SNAPSHOT' +'-' + active
 
....
cs

 

이렇게 함으로서 의도했던 내용을 모두 반영했다.

 

추가로, timestemp를 war 파일명에 넣기

 

Add a time stamp to the JAR file name in Gradle

Java, gradle, jar

linuxtut.com

 

 

728x90
반응형
728x90
반응형

jpa 사용 중 발생된 에러로 오타에 의한 것이다.

 

Entity : Bbs

Repository : BbsRepository

문제가 되는 메소드 : findbyBbsSeqAndShowYnAndDelYn => findByBbsSeqAndShowYnAndDelYn 로 수정하여 해결

 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.

20210915 12:20:13.036 [main] ERROR o.s.b.SpringApplication - Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'bbsService': Unsatisfied dependency expressed through field 'repositoryClass'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bbsRepository' defined in packageName.core.model.repository.BbsRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List packageName.core.model.repository.BbsRepository.findbyBbsSeqAndShowYnAndDelYn(java.lang.Integer,java.lang.String,java.lang.String)! No property findbyBbsSeq found for type Bbs!

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660)

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)

at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524)

at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:582)

at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:326)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)

at packageName.BookKeepingApplication.main(BookKeepingApplication.java:12)

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bbsRepository' defined in packageName.core.model.repository.BbsRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List packageName.core.model.repository.BbsRepository.findbyBbsSeqAndShowYnAndDelYn(java.lang.Integer,java.lang.String,java.lang.String)! No property findbyBbsSeq found for type Bbs!

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524)

at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)

at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)

... 21 common frames omitted

Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List packageName.core.model.repository.BbsRepository.findbyBbsSeqAndShowYnAndDelYn(java.lang.Integer,java.lang.String,java.lang.String)! No property findbyBbsSeq found for type Bbs!

at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.(PartTreeJpaQuery.java:96)

at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:107)

at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:218)

at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:81)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:100)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$mapMethodsToQuery$1(QueryExecutorMethodInterceptor.java:93)

at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)

at java.util.Iterator.forEachRemaining(Unknown Source)

at java.util.Collections$UnmodifiableCollection$1.forEachRemaining(Unknown Source)

at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)

at java.util.stream.AbstractPipeline.copyInto(Unknown Source)

at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)

at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)

at java.util.stream.AbstractPipeline.evaluate(Unknown Source)

at java.util.stream.ReferencePipeline.collect(Unknown Source)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.mapMethodsToQuery(QueryExecutorMethodInterceptor.java:95)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$new$0(QueryExecutorMethodInterceptor.java:85)

at java.util.Optional.map(Unknown Source)

at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.(QueryExecutorMethodInterceptor.java:85)

at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:303)

at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:323)

at org.springframework.data.util.Lazy.getNullable(Lazy.java:230)

at org.springframework.data.util.Lazy.get(Lazy.java:114)

at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:329)

at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:144)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782)

... 31 common frames omitted

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findbyBbsSeq found for type Bbs!

at org.springframework.data.mapping.PropertyPath.(PropertyPath.java:90)

at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:437)

at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:413)

at org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:366)

at java.util.concurrent.ConcurrentMap.computeIfAbsent(Unknown Source)

at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:348)

at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:331)

at org.springframework.data.repository.query.parser.Part.(Part.java:81)

at org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:249)

at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)

at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)

at java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source)

at java.util.stream.AbstractPipeline.copyInto(Unknown Source)

at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)

at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)

at java.util.stream.AbstractPipeline.evaluate(Unknown Source)

at java.util.stream.ReferencePipeline.collect(Unknown Source)

at org.springframework.data.repository.query.parser.PartTree$OrPart.(PartTree.java:250)

at org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:383)

at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)

at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)

at java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source)

at java.util.stream.AbstractPipeline.copyInto(Unknown Source)

at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)

at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)

at java.util.stream.AbstractPipeline.evaluate(Unknown Source)

at java.util.stream.ReferencePipeline.collect(Unknown Source)

at org.springframework.data.repository.query.parser.PartTree$Predicate.(PartTree.java:384)

at org.springframework.data.repository.query.parser.PartTree.(PartTree.java:92)

at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.(PartTreeJpaQuery.java:89)

... 57 common frames omitted

728x90
반응형
728x90
반응형

input 태그에 작성값이 특정 조건에 맞지 않을때 기존 값을 다시 대입시키고 싶었다.

이에 적당한 코드가 있어서 기록해둠

1
2
3
4
5
6
7
8
9
10
11
$('input').on('focusin'function(){
    console.log("Saving value " + $(this).val());
    $(this).data('val', $(this).val());
});
 
$('input').on('change'function(){
    var prev = $(this).data('val');
    var current = $(this).val();
    console.log("Prev value " + prev);
    console.log("New value " + current);
});
cs

 

javascript의 focusin 이벤트와 change 이벤트, 커스텀 속성만 이해해 두면 아주 간단한 소스.

 

 

출처 : 

 

Input jQuery get old value before onchange and get value after on change

I have an input text in jQuery I want to know if it possible to get the value of that input text(type=number and type=text) before the onchange happens and also get the value of the same input inpu...

stackoverflow.com

 

728x90
반응형
728x90
반응형

EntityClass 파일에서 @Column(name = "COLUMN_NAME")가 두개 이상 존재

 

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: packageName.core.model.entity.EntityClass column: COLUMN_NAME (should be mapped with insert="false" update="false")

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524)

at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)

at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1153)

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:582)

at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:326)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)

at packageName.BookKeepingApplication.main(BookKeepingApplication.java:12)

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: packageName.core.model.entity.EntityClass column: COLUMN_NAME (should be mapped with insert="false" update="false")

at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421)

at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)

at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782)

... 17 common frames omitted

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: packageName.core.model.entity.EntityClass column: COLUMN_NAME (should be mapped with insert="false" update="false")

at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:862)

at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:880)

at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:902)

at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:634)

at org.hibernate.mapping.RootClass.validate(RootClass.java:267)

at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:354)

at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:298)

at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:468)

at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259)

at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58)

at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)

at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)

... 21 common frames omitted

728x90
반응형
728x90
반응형

지난주 금요일 오후에 클라우드 서버에 수정된 내용을 반영하려고 보니 접속이 되지 않았다.

분명 전날까지 됐던것 같은데 안 되는 것이다. 

무료 평가판이 종료되었다는 메일은 받았지만, 그래도 무료로 쓸수 있는걸로 아는데 접근이 안된다.

인스턴스의 재시작을 시도해도 아래와 같은 메시지가 나올뿐 실행되지 않았다.

Instance ocid1.instance.oc1.ap-seoul-1.XXX is disabled and will not accept any action requests. Please contact customer support to reenable.

 

추측하는 원인은,

1. 무료 평가판이 종료가 되었고

2. 기존에 선택했던 Windows Server가 Free Tier에서는 선택할 수 없기 때문으로 보인다.

 

그래서 결국 Ubuntu 20.04로 인스턴스를 생성해 서버를 설정하기로 했다.

아래는 이번에 처음 Ubuntu를 사용하면서 겪은 문제를 해결하면서 정리한 내용을 모아둔다.

 

1. 방화벽 열기

방화벽 설정 전에 먼저 업데이트를 한다.

1
2
3
4
5
# apt-get 도구 업데이트
sudo apt-get update
 
# apt-get 도구 업그레이드
sudo apt-get upgrade
cs

 

1-1. Ubuntu의 방화벽 오픈

기존에도 방화벽을 오픈하기 위해 상당한 삽질을 했다.

일부 주요 방화벽은 오라클에서 자동으로 오픈해 주지만, OS단에서도 방화벽을 오픈해야 줘야 한다.

그리고 내 경우 Ubuntu에서는 방화벽 오픈을 위해 3가지 액션이 필요했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 방화벽 오픈
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8080/tcp # tomcat 기본 port
sudo ufw allow 3389/tcp # xrdp를 위한 port
sudo ufw allow 3306/tcp # mysql 또는 mariadb를 위한 port
 
# 오픈 내역 확인
sudo ufw show raw
 
# IPtables 규칙
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 3389 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT
 
# 규칙 저장
sudo service iptables save
 
# 내역 확인
sudo iptables --list
 
## 재부팅시 규칙 초기화 방지를 위해
# 패키지 설치
sudo apt-get install iptables-persistent netfilter-persistent
 
# 저장
netfilter-persistent save
 
# 다시 로그
netfilter-persistent start
 
 
# 재부팅
reboot
 
cs

순서대로 해도 적용이 잘 안 될 때가 있다.

그러므로 적용 되었는지 조회해 보고 안 됐다면 다시 적용해 보도록 한다.

1-2. Oracle Cloud 방화벽 오픈

Oracle Cloud에서도 방화벽 설정하는 부분이 있다. 이것도 필수로 해야한다.(아래 링크 참조)

 

오라클 클라우드 프리티어(4) - 무료 VPS 사용

안녕하세요 이번 포스팅에서는 보안 룰셋 설정과 Linux OS의 Firewall 설정, 서버간 route 허용,Oracle Cloud 사용량 확인 에 관한 내용을 확인해보도록 하겠습니다.오라클 클라우드 프리티어 구성 후 Ubun

hoing.io

 

# 참고정보

합쳐서 잘 소개된 경우는 없었던 것 같다. 자세한 정보는 ufw, iptables, netfilter-persistent 등으로 검색해 보는걸 추천

 

30 오라클클라우드 80, 443포트 열기

[https://www.oracle.com/kr/cloud/](https://www.oracle.com/kr/cloud/){:target=_blank}에 접속합니다. 오라클라우드 로그인 후 컴퓨트>인스턴스> 서버선택 서버 인스턴스 상세

pythonblog.co.kr

 

 

우분투(Ubuntu) 리눅스 서버에서 IPtables를 활용해 방화벽 설정하기

※ IPtables 소개 ※ IPtables는 UFW와 마찬가지로 우분투(Ubuntu) 서버에 포함되어 있는 기본적인 방화벽 도구(Tool)입니다. IPtables를 이용하면 매우 다양한 방화벽 설정이 가능하다는 점에서 활용도가

ndb796.tistory.com

 

2. Tomcat 설치

자세한 정보는 아래 링크 참조

 

Mac) Oracle FreeTier 이용해 웹 어플리케이션 배포하기 2) 톰캣 설치하기 및 배포 + 외부 접속 허용

Mac) Oracle FreeTier 이용해 웹 어플리케이션 배포하기 2) 톰캣 설치하기 및 배포  + 외부 접속 허용 https://shanepark.tistory.com/170 Mac) Oracle FreeTier 톰캣 서버열기 1)인스턴스 만들고..

shanepark.tistory.com

링크의 정보 중 curl localhost:8080 실행했을 때 문제가 없다면 당신은 잘못이 없다. 방화벽을 확인해라!

 

3. Ubuntu GUI 사용하기

 

[Ubuntu] GUI 설치

우분투 설치 시 desktop 버전이 아닌 server 버전을 선택하였다면, GUI 레벨이 아닌 CLI 레벨로 구축이 된다. 간혹 server에서 작업하던 도중 desktop 버전에서 쓸 수 있는 유틸리티가 필요한 경우가 있어 G

velog.io

 

[우분투(ubuntu)] 원격데스크톱(xrdp) 사용하기

Ubuntu Ver : Server 18.04.1 LTS 우분투 기본 인터페이스로 xrdp 원격 환경 구축 방법이다. 특히 18.04.1 버전은 큰 설정없이 원격 환경 구축이 가능하다. SSH는 많이 쓰지만 실제 원격 데스크톱 환경은 많이

t2t2tt.tistory.com

 

[Ubuntu 20.04 LTS]한글 입력 방법

한글 키보드 설정 좌측 하단에 바둑판 모양을 눌러줍니다. 윈도우 로고와 같은 기능입니다. 그리고 search에 setting을 입력 해 주면 제일 왼쪽에 톱니바퀴 모양이 나옵니다. 눌러줍니다. 왼쪽 메뉴

pstudio411.tistory.com

 

 

우분투에서 바탕 화면 바로 가기를 만드는 방법 - 최신

데스크탑 아이콘은 단순해야하지만 Ubuntu 18.04 LTS 및 Ubuntu 19.10과 같은 최신 릴리스에는 없습니다. 다른 운영 체제 및 다른 Linux 데스크탑에서와 같이 다음 단계를 따라 즐겨 사용하는 응용 프로그

choesin.com

 

3-1. 화면잠김 문제

일정시간 입력이 없는 경우 화면이 잠긴다.

이때 로그인이 잘 되면 문제가 없을텐데.. 이상하게도 로그인이 불가능했기 때문에 해제야만 했다.

 

우분투 20.04 LTS - 검은 화면, 자동 스크린 락 해제/설정 (자동 잠금 화면 끄기, Ubuntu 20.04 LTS Screen Lo

우분투 20.04 LTS를 처음 설치하고 사용하다 5분간 아무 동작이 없으면 자동으로 잠금 화면으로 변경되는데요. 이번에는 자동 스크린 락을 해제, 설정하는 방법에 대해서 알아보도록 할게요. 스크

ghostweb.tistory.com

 

4. Ubuntu OS 시간 변경

 

우분투 시간대(timezone) 변경하기 – buffashe's Blog

우분투 18.04.4 LTS 환경에서 진행하였습니다. 현재 설정된 시간대는 timedatectl 명령어를 사용하여 확인할 수 있습니다. 현재 Etc/UTC로 설정되어 있습니다. 방법 1: … 더 보기 "우분투 시간대(timezone)

blog.buffashe.com

 

5. mariadb 설치

 

우분투 20.04 에 MariaDB 설치하기

python의 웹 프레임워크인 Flask를 테스트하면서 DB를 연동해야할 일이 생겼다. MySQL을 설치할지 아니면 MariaDB를 설치할지를 고민하다 MariaDB를 설치하기로 했다. [Flask 웹 프레임워크] Blueprint를 이용

blogger.pe.kr

 

 

mysql 사용자추가/DB생성/권한부여

서버 관리를 하다보면 mysql 사용자 계정을 추가해 줄때가 있다. MySQL 접속 및 데이터 베이스 추가 # mysql -u root -p 사용자 계정을 추가하기 전에 먼저 현재 생성된 사용자 계정을 확인한다. mysql > use

nickjoit.tistory.com

 

 

5-1. mariadb 외부접속 불가 문제 (아래 링크의 step2 확인)

 

Allow Remote Access to MariaDB Database Server on Ubuntu 18.04 - Website for Students

This brief tutorial shows students and new users how to configure remote access connection to MariaDB database servers on Ubuntu 18.04 systems. By default

websiteforstudents.com

5-2. mariadb 대소문자를 구분하지 않도록 수정

 

Mac mariaDB lower_case_table_names 설정

Mac mariaDB lower_case_table_names 설정 기본설정 - 0 : 테이블명 대소문자 구분 (Linux) - 1 : 입력값에 관계없이 무조건 소문자로 인식하여 대소문자 구분없이 출력가능 (Windows) - 2 : 윈도우에서 테이블명..

mindols.tistory.com

 

 

* 관련글

[Oracle Cloud] 무료 클라우드 호스팅 서버 : https://deonggi.tistory.com/125

 

 

728x90
반응형
728x90
반응형

spring에서 서버로 부터 받은 데이터를 object로 작업 후 서버로 보내고 싶었는데 불 필요한 데이터가 많았다.

게다가 해당 object 데이터는 배열까지 있는지라 하나하나 지우기에는 한계가 있었다.

그래서 이런 object에 필요없는 데이터가 많은 경우 한번에 제거하고 싶었다.

 

아래는 이런 문제의 예시가 될만한 object 데이터다.

내용을 살펴보면 값이 null인 경우도 많고, showFr, showTo 같은 값은 필요하지 않았다.

사실 여기서 crtDt, updDt, delDt와 같은 데이터가 가장 큰 문제였다.

이 데이터들은 javascript에서 보내줄 필요도 없고, spring 서버에서 알아서 관리할 데이터이다.

또한 spring에서는 Date 타입이기 때문에 이대로 보낸다면 에러가 날 뿐이다.

그래서 배열 내부까지 모두 제거가 필요했기 때문에 필요했다.

 

아래는 이러한 나의 요구에 맞게 만든 javascript 함수다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* Object 데이터 정리
* 호출 시 : objectCleanner(ObjectData, ['seq', 'showFr', 'showTo'], true)
 * @param objData : 클리닝 할 object 데이터
 * @param arrDeleteKey : 삭제할 key 배열
 * @param blKeyAdd : 키 배열에 기본 배열 추가 여부
 * @param objSub : 하위 object 데이터를 위한 변수
 * @returns
 */
function objectCleanner(objData, arrDeleteKey, blKeyAdd, objSub){
    if (!(objData instanceof Object)) return;
    if (!(arrDeleteKey instanceof Object)) return;
    
    // 기본 삭제 할 key 추가
    if (blKeyAdd) arrDeleteKey.push('delYn''crtDt''crtBy''updBy''updDt''delBy''delDt');
    
    var objCheck = typeof objSub == 'undefined' ? objData : objSub;
    
    var arrKey = Object.keys(objCheck);
    var arrVal = Object.values(objCheck);
    
    for (var i=0; i<arrKey.length; i++){
        // 해당되는 key이거나 value가 null 인 경우 삭제
        if (arrDeleteKey.indexOf(arrKey[i]) > -1 || arrVal[i] == null) {            
            delete objCheck[arrKey[i]];
        }
       // 재귀호출
        if (arrVal[i] instanceof Object
            cleaningObject(objData, arrDeleteKey, false, arrVal[i]);
    }
}
cs

 

호출시 

1
objectCleanner(detailDTO, ['showFr''showTo'], true);
cs

 

사용 후 object의 내용은 아래와 같이 정리된다.

 

 

 

728x90
반응형

+ Recent posts