성장과정(dev)/Spring + Java + JPA

spring boot jpa hibernate ddl로 인한 오류해결 !

lowellSunny 2020. 5. 22. 11:29

 

could not execute statement; nested exception is org.hibernate.exception.

org.springframework.orm.jpa.JpaSystemException:

could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement

 

...

 

java.sql.SQLException:  Incorrect string value: '\xED\x85\x8C\xEC\x8A\xA4...' for column 'content' at row 1

 

원래같아서는 이런 오류가 나면 당연히 인코딩 문제겠거니 하는데 jpa로 처음 개발하다보니

다른데에 문제가 있는건 아닌지 싶어서 멀리 돌아왔다

 

결론적으로 hibernate에서 자동생성해준 테이블의 인코딩이 문제였다.

yml에서 또는 properties에서 spring.mvc.hibernate.ddl-auto=create 로 설정해놓으면

테이블이 존재하지 않더라도, 쿼리가 실행될 때 테이블을 자동생성 해준다.

 

결국 해결방법은 테이블 인코딩을 utf8로 변경해주기.

ALTER TABLE '테이블명' CONVERT TO CHARSET utf8;

 

 

 

-----------------------------------------------------------------------------------------------------------

틈새로 또 한가지 !

jdbc 설정을 위해서 build.gradle에 compile('mysql:mysql-connector-java') 를 추가하고

(properties 또는 ) yml에 다음과 같은 필수설정요소를 추가했는데

>> spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

com.mysql.cj.jdbc.Driver가 빨간색으로 뜨면서 제대로된 빌드가 안되는것이다.

빠뜨린것도 없는데.....

이거 진짜 며칠 찾았는데 버전문제였나보다. 확실한 이유는 더 찾아봐야 알겠지만,

compile('mysql:mysql-connector-java')

>

compile('mysql:mysql-connector-java:8.0.20')

이렇게 확실한 버전까지 입력해주니 그때서야 정상동작하더라