물에 살고싶은 개발자

[hibernate] 스프링+Hibernate+MySql 연동 삽질 리스트(feat.java config) 본문

Spring Framework

[hibernate] 스프링+Hibernate+MySql 연동 삽질 리스트(feat.java config)

돼지사랑 2016. 11. 21. 21:15

자바 애노테이션을 이용한 스프링MVC 설정으로 Hibernate를 연동하는 과정에서 포풍삽질이 있었다.

그 리스트를 기록한다.


일단 환경은 인텔리J 스프링+메이븐 프로젝트 만들기로 만들고(구글링하면 쏟아지는 그방법으로)

DataSource,Mvc,Web 3가지 설정파일을 만들고(각각 datasource빈 관련 설정,디스패처서블릿,web.xml 대체)

http://websystique.com/spring/spring4-hibernate4-mysql-maven-integration-example-using-annotations/

요기에 있는대로 설정했다.(여기에 안나와있는것은 T아카데미에서 배운 자바설정법대로..)



첫번째 삽질 

클래스패스 삒싸리 문제

@ContextConfiguration에서 classes가 아닌 패스지정으로 해둿었는데 클래스패스 지정에서 삒싸리가 났다.

될리가 없지..ㅋ

이 경우에 @Autowired나 @Resource를 달아둔 녀석들이 Autowired가 안된다며 빨간줄을 뱉어댄다.

뭐가 문젠지 몰라 냅다 돌렸는데 역시나 안되더라..ㅋ 그래서 그냥 자바코드로 된 config.java파일을 

@ContextConfiguration(classes={config.class} 형식으로 때려넣었다. config파일이 많아지면 못쓸방법이지만 일단은 미봉책으로라도 해결



두번째 삽질

이래저래 코딩하는 와중에 나도 모르게 @ComponentScan을 주석처리했나보다 될리가 있나..

위에 삽질을 해결하고 나서 빨간줄은 없어졌지만, 돌려보면 빈을 생성하지 못한다.



세번째 삽질

java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling


맨 아래에 이런 익셉션이 터졌다.

해결책은 간단하다. 스택오버플로우에 보니 서블릿콘텍스트가 없어서 그런다고 한다.

근데 뭔가 이상하다 난 분명 WebAppInitializer(web.xml대체)  클래스를 만들어다가 서블릿콘텍스트 생성했는디!?

는 Test 클래스에서 돌려서 그런거라고들 한다(스택오버플로우에서) 이부분 역시 토비스프링이라던가 원서로된 스프링 레퍼런스라던가를 파봐야 이해가 되겠지만..

어쨋든 Test클래스에선 @WebAppConfiguration을 달아줘서 해결한다. 저녀석이 자바설정파일들을 대체하거나 혹은 연결해주는 역할을 하는듯 하다.

(다시말하지만 자세히는 모른다. 추후 공부를 통해 이해하게되면 추가해야지 히히)




4번째 삽질

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'DB명.hibernate_sequence' doesn't exist


위에 삽질들이 끝나고 이제 되겠징?! 헤헤 하고 돌려봣더니 이렇게 나오더라..이게 뭐냐 ㅅㅂ 난 저런테이블 지정한적이 없는데!! 

하고 한참 구글링을 해봤는데도 뭐가 문젠지 안나오더라..아무튼간에 요점은

@GeneratedValue(strategy = GenerationType.AUTO)

이것이 문제다. 혼자서 계속 해메이다 사수에게 물어봣더니 하이버네이트4까지는 상관없었는데 5로 버전업이 되면서 생긴 문제라고 한다.

정확히는 이해를 못했지만, 하이버네이트5에서부터는 저걸 AUTO로 해놓을경우 지가 테이블을 만들어서 적용을 한단다. 

근데 우린 DB명.hibernate_sequence 테이블이 없잖아?! 그래서 안된거다.

정확한 원인은 하이버네이트를 Deep하게 파봐야 이해를 할 수 있을것같고, 현재수준에선 일단


@GeneratedValue(strategy = GenerationType.IDENTITY)

이렇게 바꾸면 된다. 이해가 안되면 그냥 닥치고 IDENTITY로 바꾸자.
테이블에 PK를 자동부여 하는 auto_increment 기능인줄알고했는데 ㅅㅂ..그게 맞긴 맞는데 사수말로는 mysql이랑은 이런부분에서 안맞는단다.


5번째 삽질

mvcConfig에 viewResolver 설정에서 setPrefix설정 오타로 404를 줄창 봤다.

만들어둔 폴더명과 viewResolver에서 설정한 경로에 오탈자를 정확히 확인하자


으음...끝!

Comments