일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 예제
- AWS
- 뒤로가기 안됨
- 안드로이드 스튜디오
- VisualStudio
- Invalid credentials
- gradle
- WPF
- react
- Android
- 리액트 네이티브
- react-native
- git인증
- 개발환경설정
- 안됨
- Git
- 디버깅
- 데이터바인딩
- flutter
- 안드로이드
- 설정
- 리액트
- 인증문제해결
- sourcetree
- not working
- 빌드 오류
- aPK
- EC2
- Kotlin
- bitbucket
- Today
- Total
물에 살고싶은 개발자
[hibernate] 스프링+Hibernate+MySql 연동 삽질 리스트(feat.java config) 본문
[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)
5번째 삽질
mvcConfig에 viewResolver 설정에서 setPrefix설정 오타로 404를 줄창 봤다.
만들어둔 폴더명과 viewResolver에서 설정한 경로에 오탈자를 정확히 확인하자
으음...끝!