Wrong column type in for column create_id. Found: nvarchar, expected: varchar(255)
현상 : Wrong column type in [테이블] for column create_id. Found: nvarchar, expected: varchar(255)
원인 : 하이버네이트에서 기본적으로 varchar 또는 varchar2은 String 타입과 맵핑하는데 nvarchar로 맵핑되었다고 에러 뿜뿜(못해먹겠다고 들어누운상황)
하이버네이트 문서에 보면, string : A type mapping from java.lang.String to VARCHAR (or Oracle VARCHAR2).
해결 :
1. @Nationalized 사용
예시)
@Nationalized
@Column(name = "CREATE_ID", updatable = false)
private String createId;
2. columnDefinition = "nvarchar" 사용
예시)
@Column(name = "CREATE_ID", columnDefinition = "nvarchar", updatable = false)
protected String createId;
3. SQLServerNativeDialect 사용( 위 2개는 테스트해본결과 정상동작함. 그런데 3번은 테스트 안해봤음... 일단 참고용으로... )
예시)
public class SQLServerNativeDialect extends SQLServerDialect {
public SQLServerNativeDialect() {
super();
registerColumnType(Types.VARCHAR, "nvarchar($l)");
registerColumnType(Types.CLOB, "nvarchar(max)");
}
}
참고 : http://whiteship.tistory.com/1432