티스토리 뷰
0. 주의 :다음을 가정함
- MySQL 설치
- Database 생성
- 연결할 Table 생성
1. pom.xml 에 하이버네이트 관련 추가
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.28</version>
</dependency>
2. JBoss 설치
마켓플레이스에서 JBoss 찾아서 "JBoss Tools 4.X.X Final" 설치
(원문은 하위 구성 요소 중 Hibernate Tools 만 받을 것을 권장)
소요시간 : 5분 내
3. 하이버네이트 창 열기
Window > Perspective > Open Perspective > Other > Hibernate
4. 하이버네이트 설정 추가
Hibernate Configurations 창 > 우클릭 > Add Configuration
5 Edit Configuration
4-5-1. Name 설정
4-5-2. Project 를 대상 프로젝트로 설정
4-5-3. DB 커넥션 생성
4-5-3-1 Database Connection 에서 Hibernate... 선택된 상태에서 New > 연결 원하는 DB 선택 (MySQL )
4-5-3-2. Drivers 선택할것 없는 상황, 우측의 추가 아이콘 클릭
4-5-3-3. Name/Type 탭 > 원하는 버전 선택 (5.1)
4-5-3-4. JAR List 탭 > mysql-connector-java-5.1.0-bin.jar 선택하고 > Edit JAR/Zip 버튼 > 해당 Jar 고름
(상단에 Unable to locat JAR/zip ... 메시지 떠있는 상태를 가정함.)
없는 경우 다음 링크에서 다운로드
https://dev.mysql.com/downloads/connector/j/5.1.html
https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.21
4-5-3-5. 연결 상세내역 설정
Database, URL, Username, Password, ...
jdbc:mysql://localhost:3306/디비명
4-5-3-6. Test Connection
Ping succeded 나오면 연결 확인된것
여기까지 마치면 DB 커넥션 생성됨
4-5-4. (Edit Configuration 창) Property file 행 건너뜀.
(hibernate.properties 파일인데 불필요)
4-5-5. 하이버네이트 설정파일 생성
Configuration file 행 - Setup 버튼 클릭 > Create new (기존 파일 있다면 Use exisiting. .. 선택)
세션팩토리 이름과 연결 설정.. "Get Values from Connection " 으로 앞단계 설정 가져올 수 있음.
Scheme, Catalog 는 설정 없이도 잘 생성됨.
여기까지 하면 하이버네이트설정파일, 연결이 생성됨.
* 오류 (해결) : (Error Log) Unhandled even loop exception
- 오류 상세내역
org.hibernate.service.spi.ServiceException: Unable to create requested service
[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
...
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
HIbernate 버전이 5.3으로 지정되어 있었는데, 5.0 으로 바꾸고 성공했음.
* 오류(해결) : pom 에서 <dependency> 에
Missing artifact org.hibernate:hibernate-core:jar:5.2.17 Final 오류 나는 경우
버전을 <version>${org.hibernate-version}</version>
이런식으로 프로퍼티 이용해서 하면 오류 남.. (그냥 버그인듯.)
<version>5.2.17.Final</version>
* 경고(해결) :
(Problems (VIEW)) The POM for org.springframework:spring-web:jar:5.0.5.RELEASE is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
- 경고로 표시되지만 의존성 관련 문제로 꼭 해결해야 함
- Debug Log 켜야 상세 내역 볼 수 있었음.
(Window -> Preferences -> Maven -> Debug Output)
- 상세내역은 다음과 같음.
The POM for org.springframework:spring-web:jar:5.0.5.RELEASE is invalid, transitive dependencies (if any) will not be available: 1 problem was encountered while building the effective model
[FATAL] Non-parseable POM /root/.m2/repository/org/springframework/spring-web/5.0.5.RELEASE/spring-web-5.0.5.RELEASE.pom: only whitespace content allowed before start tag and not p (position: START_DOCUMENT seen p... @1:1) @ line 1, column 1
* 오류(해결) : root-context.xml 의
cvc-complex-type.2.3: Element 'beans' cannot have character [children], because the type's content type is element-only.
검색해보니 대부분 잘라서 붙이면 된다고 하는데, 안됨
껐다 켜면 되나?? 안됨
- 해결 : 아무 이유 없음.. xml 의 일부분 잘랐다가 붙였따가 지웠다가 하다보니 그냥 됨..
* servlet-context.xml 에서 Error occured processing XML 'org/springframework/format/support/FormattingConversionServiceFactoryBean'. See Error Log for more details
- spring 5.0.5 로 했을때 JAR 가져오지 못한 상태에서 생겼던 문제.
5.0.4 로 내리고 나서 함께 해결됨.
5-6. root-context.xml 설정
<bean id="dataSourceMySQL" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/디비명" />
<property name="username" value="아이디" />
<property name="password" value="비번" />
</bean>
<bean id="sessionFactoryMySQL" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSourceMySQL" />
<!-- <property name="configLocation" value="/WEB-INF/spring/hibernate.cfg.xml"/> -->
<property name="configLocation" value="/WEB-INF/classes/hibernate.cfg.xml"/> <!-- /src//main/java/hibernate.cfg.xml 에 있는 경우 -->
</bean>
<bean id="transactionManagerMySQL" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactoryMySQL" />
</bean>
-
6. 서버 구동 확인 : 설정에 문제가 없다면 서버가 구동됨.
* 오류 : Could not publish to the server.
java.lang.IndexOutOfBoundsException
An internal error occurred during: "Updating status for Tomcat v8.5 Server at localhost...".
java.lang.IndexOutOfBoundsException
...
- Build path java 1.6 -> 8 변경
(버전 바꿔도 자동으로 다시 돌아가는 문제 해결법 http://dogcowking.tistory.com/150 )
- Project Facets - Dynamic Web Module 2.5 -> 4.0
Java 1.6 -> 1.8
변경 했으나 소용 없음..
- 이클립스 껐다 켜도 소용 없음
- 프로젝트 클린 해도 소용 없음
- Alt+F5 Maven Update + Force update 해도 소용 없음
- 톰캣 8.5가 Dynamic web module 4.0 과 안맞을 거라 생각해서 3.1로 낮췄지만 효과 없음.
버전 참고 : http://tomcat.apache.org/whichversion.html
- 라이브러리 문제란 의견
- 해결 : 이 문제의 원인을 보기 위해서는 이클립스를 터미널에서 실행해야 함.
터미널에서 실행한 상태에서 Server - Publish 하면 오류창이 뜨고,
터미널에는 다음과 같은 로그가 보임...
Archive opener did not close archive: /root/.m2/repository/org/hibernate/hibernate-core/5.2.17.Final/hibernate-core-5.2.17.Final.jar
Archive was opened here:
org.eclipse.jst.jee.archive.internal.FailedToCloseException
at org.eclipse.jst.jee.archive.internal.ArchiveImpl.<init>(ArchiveImpl.java:135)
* 참고 : Projects Facet 변경 중 오류
* [Problems (view)] Cannot change version of project facet Dynamic Web Module to 2.5.
- 해결 : http://dogcowking.tistory.com/151
* [Problems (view)] Java compiler level does not match the version of the installed Java project facet.
- Project Facets, Build path, pom.xml 자바 버전 맞추고
- 자바 버전 - 톰캣 버전 의존성 확인
버전 참고 : http://tomcat.apache.org/whichversion.html
(자바 버전 바꿔도 자동으로 다시 돌아가는 문제 해결법 http://dogcowking.tistory.com/150 )
* [Problems (view)] One or more constraints have not been satisfied.
7. 코드 생성
엔티티, 서비스, DAO 클래스를 작성함.
http://dogcowking.tistory.com/152
8. root-context - 세션팩토리에 packageToScan 추가
엔티티가 있는 패키지를 등록해줘야 읽어올 수 있다.
<bean id="sessionFactoryMySQL" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
...
<property name="packagesToScan">
<list>
<value>com.cidog.nlp.model</value>
</list>
</property>
- 위 코드 작성하지 않을 경우 엔티티 읽어오지 못해 다음 오류 발생함
org.hibernate.hql.internal.ast.QuerySyntaxException: 엔티티 is not mapped
- Entity 선언 코드에서 테이블명 틀린 경우 다음 오류 발생
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'DB명.테이블명' doesn't exist
- Entity @Id (Primary key) 지정 없을 경우 다음 오류 발생
Caused by: org.hibernate.AnnotationException: No identifier specified for entity: 엔티티클래스
9. 여기까지 하고 특정 페이지에 테스트 코드 작성하여 확인.
* 경고 : [Problem (View) ] Missing beans.xml file in the project 180503cidognlp. This file is required for bean archives [JSR-299 §12.1]
* 참고 : hibernate.cfg.xml (자동생성된 결과)
<hibernate-configuration>
<session-factory name="sf">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">XXXXX</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/DB명</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
</session-factory>
</hibernate-configuration>
'SW개발 > Spring Framework' 카테고리의 다른 글
eclipse - 웹 프로젝트 Context root 변경하는 방법 (0) | 2018.08.17 |
---|---|
mysql connector - MySQL 호환성 (0) | 2018.05.11 |
Hibernate 기본 코드 (0) | 2018.05.03 |
Ubuntu / Eclipse, Srping, Hibernate 개발환경 설정 (0) | 2018.05.03 |
Hibernate] MariaDB 연결 (0) | 2018.04.25 |