簡體   English   中英

使用 UUIDTypeHandler 時 UUID 插入失敗

[英]UUID insert fails when using a UUIDTypeHandler

我正在嘗試將 UUID 值插入到 Postgresql 表中,因此我定義並配置了一個 UUIDTypeHandler 以在 mybatis 級別處理此問題。

不幸的是,插入操作失敗並出現以下錯誤。

類型處理程序定義如下所示: http://www.java2s.com/example/java-src/pkg/debop4k/data/mybatis/typehandlers/postgres/uuidtypehandler-cb65d.html

我的 xml 映射器如下所示。 userId 字段保存 UUID 值:

<insert id="createUser" parameterType="com.kp.mw.db.dbos.UserDBO">
        INSERT INTO users (id, username, email, birth_year, birth_month, password, creation_time, verification_token, country, language)
        VALUES (#{userId}, #{user.username}, #{user.email}, #{user.birthYear}, #{user.birthMonth}, #{user.password}, #{user.creationTime}, #{user.verificationToken}, #{user.country}, #{user.language})
    </insert>

知道如何解決這個問題嗎? 謝謝

middleware_1  | 2022-08-05T00:20:42.113Z <> {thread=http-nio-8080-exec-1} ERROR: [com.kp.mw.exceptions.RestExceptionHandler] com.kp.mw.exceptions.RestExceptionHandlerrlf(Exception occurred:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='userId', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.NullPointerException: Cannot read field "TYPE_CODE" because "jdbcType" is null
middleware_1  |         at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)
middleware_1  |         at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
middleware_1  |         at jdk.proxy2/jdk.proxy2.$Proxy87.insert(Unknown Source)
middleware_1  |         at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)
middleware_1  |         at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
middleware_1  |         at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145)
middleware_1  |         at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
middleware_1  |         at jdk.proxy2/jdk.proxy2.$Proxy89.createUser(Unknown Source)
middleware_1  |         at com.kp.mw.services.UsersService.createUser(UsersService.java:70)
middleware_1  |         at com.kp.mw.controllers.UserController.createUser(UserController.java:57)
middleware_1  |         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
middleware_1  |         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
middleware_1  |         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
middleware_1  |         at java.base/java.lang.reflect.Method.invoke(Method.java:568)
middleware_1  |         at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
middleware_1  |         at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
middleware_1  |         at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
middleware_1  |         at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
middleware_1  |         at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
middleware_1  |         at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
middleware_1  |         at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1070)
middleware_1  |         at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
middleware_1  |         at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
middleware_1  |         at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
middleware_1  |         at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
middleware_1  |         at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
middleware_1  |         at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
middleware_1  |         at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
middleware_1  |         at com.kp.mw.filters.AuthorizationFilter.doFilter(AuthorizationFilter.java:39)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
middleware_1  |         at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
middleware_1  |         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
middleware_1  |         at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
middleware_1  |         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
middleware_1  |         at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
middleware_1  |         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
middleware_1  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
middleware_1  |         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
middleware_1  |         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
middleware_1  |         at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
middleware_1  |         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
middleware_1  |         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
middleware_1  |         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
middleware_1  |         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
middleware_1  |         at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
middleware_1  |         at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
middleware_1  |         at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
middleware_1  |         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)
middleware_1  |         at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
middleware_1  |         at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
middleware_1  |         at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
middleware_1  |         at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
middleware_1  |         at java.base/java.lang.Thread.run(Thread.java:833)
middleware_1  | Caused by: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='userId', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.NullPointerException: Cannot read field "TYPE_CODE" because "jdbcType" is null
middleware_1  |         at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:89)
middleware_1  |         at org.apache.ibatis.executor.statement.PreparedStatementHandler.parameterize(PreparedStatementHandler.java:94)
middleware_1  |         at org.apache.ibatis.executor.statement.RoutingStatementHandler.parameterize(RoutingStatementHandler.java:64)
middleware_1  |         at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:88)
middleware_1  |         at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49)
middleware_1  |         at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
middleware_1  |         at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
middleware_1  |         at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194)
middleware_1  |         at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181)
middleware_1  |         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
middleware_1  |         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
middleware_1  |         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
middleware_1  |         at java.base/java.lang.reflect.Method.invoke(Method.java:568)
middleware_1  |         at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)
middleware_1  |         ... 61 more
middleware_1  | Caused by: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.NullPointerException: Cannot read field "TYPE_CODE" because "jdbcType" is null
middleware_1  |         at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:75)
middleware_1  |         at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:87)
middleware_1  |         ... 74 more
middleware_1  | Caused by: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.NullPointerException: Cannot read field "TYPE_CODE" because "jdbcType" is null
middleware_1  |         at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:75)
middleware_1  |         at org.apache.ibatis.type.UnknownTypeHandler.setNonNullParameter(UnknownTypeHandler.java:67)
middleware_1  |         at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:73)
middleware_1  |         ... 75 more
middleware_1  | Caused by: java.lang.NullPointerException: Cannot read field "TYPE_CODE" because "jdbcType" is null
middleware_1  |         at com.kp.mw.db.typehandlers.UUIDTypeHandler.setNonNullParameter(UUIDTypeHandler.java:20)
middleware_1  |         at com.kp.mw.db.typehandlers.UUIDTypeHandler.setNonNullParameter(UUIDTypeHandler.java:14)
middleware_1  |         at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:73)
middleware_1  |         ... 77 more

我設法通過從 setObject 調用中刪除 jdbcType.TYPE_CODE 參數來解決我的問題。

@Override
    public void setNonNullParameter(PreparedStatement ps, int i, UUID parameter, JdbcType jdbcType)
            throws SQLException {
        ps.setObject(i, parameter);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM