문제

Varchar 기본 키가있는 테이블을 관리하고 싶습니다. 매핑 된 Java 객체는 UUID 여야합니다.

나는 내 sql-map-config.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
   "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
       <properties resource="database.properties"/>
   <typeHandlers>
       <typeHandler
handler="[...].persistence.typehandlers.UuidTypeHandler"
                    javaType="java.util.UUID"
                    jdbcType="VARCHAR"/>
   </typeHandlers>
       <environments default="development">
               <environment id="development">
                       <transactionManager type="JDBC" />
                       <dataSource type="POOLED">
                               <property name="driver" value="${driver}" />
                               <property name="url" value="${url}" />
                               <property name="username" value="${username}" />
                               <property name="password" value="${password}" />
                       </dataSource>
               </environment>
       </environments>
       <mappers>
               <mapper resource="user.xml" />
   </mappers>
</configuration>

그리고 user.xml 그것은 다음과 같다:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="[...].persistence.mappers.UserMapper">

   <select id="selectUserByUUID" parameterType="java.util.UUID"
resultMap="userResultMap">
       SELECT * FROM user WHERE uuid = #{uuid, jdbcType=VARCHAR,
typeHandler=[...].persistence.typehandlers.UuidTypeHandler}
   </select>
   <resultMap id="userResultMap" type="[...].model.User">
       <id property="uuid" column="uuid" jdbcType="OTHER"
typeHandler="[...].persistence.typehandlers.UuidTypeHandler"/>
       ...
   </resultMap>
</mapper>

어쨌든 이런 예외가 생겼습니다.

org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause:
org.apache.ibatis.reflection.ReflectionException: There is no getter
for property named 'uuid' in 'class java.util.UUID'
### The error may involve
[...].persistence.mappers.UserMapper.selectUserByUUID-Inline
### The error occurred while setting parameters
### Cause: org.apache.ibatis.reflection.ReflectionException: There is
no getter for property named 'uuid' in 'class java.util.UUID'

내 TypeHandler는 결코 전화를받지 않는 것 같습니다.뭔가 문제가 있나요?감사해요.

도움이 되었습니까?

해결책 2

내 질문에 대답하는 것이 다소 이상해 보이지만 mybatis-users 목록에서 도움을 얻었으므로 여기에 몇 가지 힌트를 공유하고 싶습니다.

Mybatis는 존재하지 않는 필드를 "가져오려고" 했습니다.다행히 mybatis 개발자 중 한 명이 얼마 전에 나를 도와주었고, 이를 작동시키는 가장 쉬운 방법은 다음을 추가하는 것이라고 제안했습니다. @Param 이 작업을 수행하려면 UserMapper에 주석을 추가하세요.

public User selectUserByUUID(@Param("uuid") UUID uuid);

<select id="selectUserByUUID" parameterType="uuid" resultMap="userResultMap"> 
SELECT * FROM user WHERE uuid = #{uuid, typeHandler=com.collective.persistence.typehandlers.UuidTypeHandler, javaType=uuid, jdbcType=VARCHAR}
</select> 

타입 핸들러 구성을 보는 데 갇혀 있었지만 제대로 이해하면 SQL 테이블과 Java 객체 (세터와 getters를 통해) 사이의 데이터를 "전송 및 번역"하는 데 사용되기 때문에 타입 핸들러와는 그리 많지 않습니다. ), 내 문제는 메소드 매개 변수를 처리하는 동안 이루어졌습니다.이것이 누군가에게 도움이 되기를 바랍니다.

다른 팁

당신의 문제는 바로 당신의 예외에 있습니다....

There is no getter for property named 'uuid' in 'class java.util.UUID'

매개변수 유형은 String을 사용하고 고유 ID를 인수로 전달합니다.유형 처리기가 필요하지 않습니다.

또한 해당 대기열과 함께 매퍼 파일에 새 메소드를 추가하면 이러한 오류를 수정할 수 있습니다.Smth 이와 같이:

@Select("SELECT * FROM Users u WHERE u.userUUID = '${uuid}'")
User selectByUserUuid(@Param("uuid") UUID uuid);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top