Hibernate와MySQL
Hibernate와 MySQL
longblob과 longtext만 되는 이유
Hibernate 3.3 부터인가 mediumblob, blob, tinyblob 과 mediumtext, text, tinytext 등이 먹지 않고 항상 longblog과 longtext 만 작동한다.
원래 3.2에서는 Column lenght 에 따라 적당한 크기의 blob과 text 로 알아서 컬럼을 지정해 줬었다.
org.hibernate.dialect.MySQLDialect 소스 코드를 보면 mediumblob, blob, text, mediumtext 에 관해 세팅하는 부분이 주석 처리되어 있다.
이 부분이 주석 처리된 이유는 소스 코드에 달린 Subversion 커멘트를 따라서 HHH-2669 번 이슈를 살펴보면 나온다.
MySQL의 mediumblob, blob, mediumtext, text 등이 실질적인 성능이나 용량 문제를 개선해 주지도 않으면서 자기가 담는 내용보다 큰 데이터가 들어오면 그냥 잘라먹어 버리기 때문이라고 한다.
따라서 그냥 모두 longblob 으로 해버리고, 용량에 관한 제약 조건은 각 프로그램에서 개발자가 로직으로 처리하는 것이 맞다는 얘기다.
comments
Exception 로그를 남기는 7가지 좋은 방법
http://www.codemonkeyism.com/archives/2008/12/16/7-good-rules-to-log-exceptions/
- 기술적인 예외만 로그로 남기고, 사용자 예외는 로그로 남기지 말라.
사용자 예외의 예 : 동일한 사용자명이 이미 존재합니다.
기술적인 예외 : 저장 공간이 부족하다. 제품 예약에 실패했다. - 예외 발생시 사용 중이던 데이터를 저장하라.
- 예외 발생 상황에 대한 설명을 저장하라.
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer - 예외의 모든 원인을 저장하라. - 예외가 다른 예외로부터 발생하였을 경우 원본 예외를 저장하라는 뜻.
- 올바른 로그 레벨을 사용하라.
- 로그를 남기고서 또다시 예외를 던지지 마라.
- 로그를 남길 때 System.out이나 System.err 을 사용하지 말라. -> 항상 로깅 프레임워크(log4j, commons-logging, slf4j)를 사용하라.
