티스토리 뷰



http://ssmlim.tistory.com/31



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)

https://stackoverflow.com/questions/10419359/eclipse-re-run-maven-using-the-x-switch-to-enable-full-debug-logging?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa



- 상세내역은 다음과 같음.

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


- 파일이 utf-8 이 아니라서 그런단 의견

- pom.xml 에서 5.0.5.RELEASE => 5.0.4.RELEASE로 낮추고 나서 해결


* 경고(보류) : Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
해결 않고 넘김



* 오류(해결) :  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



- 라이브러리 문제란 의견

https://stackoverflow.com/questions/32229137/updating-status-for-apache-tomcat-v7-0-at-localhost-java-lang-indexoutofbo?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa



- 해결 : 이 문제의 원인을 보기 위해서는 이클립스를 터미널에서 실행해야 함.

터미널에서 실행한 상태에서 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)


...

이 경우 위의 jar 파일이 잘못된 것.
Maven 문제임.

pom.xml 에서 5.2.17.Final 버전을 5.2.16.Final 버전으로 낮추고 Alt  + F5  한 후 해결

(전반적으로 Maven 문제가 많이 있음)

- 이 문제는 JAR 문제인 듯하고 터미널에서 문제 있는 Jar 확인 하여 수정하는 방법으로 해결.




* 참고 : 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>


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
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 31
글 보관함