사용자 도구

사이트 도구


java:hibernate:usertype:stringboolean

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
java:hibernate:usertype:stringboolean [2014/10/08 10:40]
kwon37xi 만듦
java:hibernate:usertype:stringboolean [2020/08/12 13:40] (현재)
kwon37xi [StringBoolean Hibernate UserType]
줄 3: 줄 3:
 Hibernate는 기본적으로 "yes_no"와 "true_false"라는 문자열 Boolean 매핑이 이미 존재한다. 하지만 이들는 "Y/N", "T/F" 이외의 알 수 없는 값이 들어왔을 때 오류를 발생시킨다. **특히 Empty 문자열에 대해서도 null이 아닌 에러로 처리한다**. Hibernate는 기본적으로 "yes_no"와 "true_false"라는 문자열 Boolean 매핑이 이미 존재한다. 하지만 이들는 "Y/N", "T/F" 이외의 알 수 없는 값이 들어왔을 때 오류를 발생시킨다. **특히 Empty 문자열에 대해서도 null이 아닌 에러로 처리한다**.
  
-데이터가 망가진 상태의 Legacy DB와 매핑할 필요가 있을 때는(근본적으로 데이터를 고치는게 맞지만) 문제 가능성이 있어서 따로 만든 UserType. 이 UserType은 legacy 매핑시에만 사용하고 신규 DB를 구축할 때는 절대로 저런일이 발생할 수 없도록 **BOOLEAN NOT NULL** 컬럼으로 만드는 것이 애초에 좋다.+데이터가 망가진 상태의 Legacy DB와 매핑할 필요가 있을 때는(근본적으로 데이터를 고치는게 맞지만) 문제 가능성이 있어서 따로 만든 UserType. **이 UserType은 legacy 매핑시에만 사용하고 신규 DB를 구축할 때는 절대로 저런일이 발생할 수 없도록 BOOLEAN NOT NULL** 컬럼으로 만드는 것이 애초에 좋다. 
 + 
 +한 마디로... 이런 **UserType은 사용할 일을 만들지 말자.** 
 + 
 +또한, [[java:jpa:converter|JPA Converter]]를 사용하게 하는게 나을 듯 하다.
  
 ===== 코드 ===== ===== 코드 =====
줄 124: 줄 128:
  
     if (stringBooleanValue == null) {     if (stringBooleanValue == null) {
 +      log.trace("Found [{}] as column [{}] original value [{}]", null, names[0], stringBooleanValue);
       return null;       return null;
     }     }
  
     if (stringEqualsWithCaseCheck(trueValue, stringBooleanValue)) {     if (stringEqualsWithCaseCheck(trueValue, stringBooleanValue)) {
 +      log.trace("Found [{}] as column [{}] original value [{}]", true, names[0], stringBooleanValue);
       return true;       return true;
     }     }
  
     if (stringEqualsWithCaseCheck(falseValue, stringBooleanValue)) {     if (stringEqualsWithCaseCheck(falseValue, stringBooleanValue)) {
 +      log.trace("Found [{}] as column [{}] original value [{}]", false, names[0], stringBooleanValue);
       return false;       return false;
     }     }
-    + 
 +    log.trace("Found [{}] as column [{}] original value [{}]", unknownResult, names[0], stringBooleanValue);
     return unknownResult;     return unknownResult;
   }   }
줄 157: 줄 165:
       columnValue = falseValue;       columnValue = falseValue;
     }     }
 +    log.trace("binding parameter [{}] as [{}] - [{}] original value [{}]", index, JdbcTypeNameMapper.getTypeName(sqlTypes[0]), columnValue, value);
  
     st.setObject(index, columnValue);     st.setObject(index, columnValue);
java/hibernate/usertype/stringboolean.1412732436.txt.gz · 마지막으로 수정됨: 2014/10/08 10:40 저자 kwon37xi