오라클 엔플쓰다가 xe쓰니까 먼가 이상해서 색다른 디비를 알아보던차.. 큐브리드를 사용해봤는데.. 첨엔 괜찮았다.....

아니 근데 이게 왠걸.. 하이바네이트에서 foreign key를 못잡아준다...... 설정을 잘못했나 싶어서 오라클에서 스키마 export해봤지만.. 큐브리드에서는 못잡는다....

Date타입도 년월일만 인식하고... 시간분초... 제대로 사용할수 없다.
TIMESTAMP도 insert는 다 되는데 출력은 안된다........

아직 하이버네이트측과 큐브리드 측이 친하지 않은건지............
빨리 친해지길 바래 -_-;;

postgresql 을 써봐야 하나.....

'Database > Hibernate' 카테고리의 다른 글

Hibernate Log4j 설정.  (0) 2009.10.24
CRUD Test.  (0) 2009.10.24
SchemaExport.  (0) 2009.10.24
Hibernate Code Generation..  (0) 2009.10.23
Hibernate 도전!  (0) 2009.10.22

log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug

가장 많이 쓰일듯 싶다. 실행된 쿼리문을 로그로 찍는것과.. 넘어온 파라미터 값을 확인할 수 있다.

### log just the SQL (hibernate.cfg.xml 설정과 겹친다. hibernate.show_sql = false 한다.)
log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
(log4j 1.2.15 쓰는데.. debug로 하면 안나오더라..)
log4j.logger.org.hibernate.type=TRACE

### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=info

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
log4j.logger.org.hibernate.cache=info

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

'Database > Hibernate' 카테고리의 다른 글

큐브리드 foreign key.....  (0) 2010.07.04
CRUD Test.  (0) 2009.10.24
SchemaExport.  (0) 2009.10.24
Hibernate Code Generation..  (0) 2009.10.23
Hibernate 도전!  (0) 2009.10.22
Schema Export 보기.

이제 디비에 insert, update, del.... 간단한 테스트를 해봅니다.
해보니까 알아서 쿼리문 사용하고.. 편하긴 편한거 같은데... (뭔가 찝찝..)

일단 지저분한 테스트 코드로 데이터를 넣어봤습니다. 말그대로 Insert 하는것이고..
그냥 객체 생성해서 save하면 끝나는거 같네요. 물론 하이버네이트에는 많은 기능들이 있을테지만..
save뿐이 모르기에 ^^


테스트 돌려보니 역시나 콘솔창에서 알아서 쿼리문을 만들어서 집어넣는거 같습니다.
음.. 넘어온 파라미터들까지 볼 수 있으면 좋을텐데요.........
어딘가 그런 설정이 있을거 같은데.. 없으려나 ㅎㅎ [ Log4j 설정 보기 ]


삭제와 수정을 해보기에 앞서 DB에서 객체를 가져오는거 먼저...
(일단 매번 session을 얻어오고 transaction.. try ~ catch 해주는 중복 코드는 인터페이스와
추상클래스로 제거했습니다.)


- get : 호출 시점에서 select 쿼리 실행.
- load : 객체의 값이 실제로 필요한 시점에 쿼리 실행.

정말 간단합니다...........
나머지 수정과 삭제를 해봐야 하는데.. select 된 객체를 넣어주면 끝납니다.....


당연한 얘기지만.. 가져와서 수정을 하네요.
근데 이렇게 되면 매번 수정을 하기 위해선 select를 무조건 실행해야합니다.

그럼 이렇게 해보는건?? (사실 전 첨에 이렇게 했었습니다만..........)



결과는...


저도 되지 않을까 싶었는데.. board.hbm.xml에 설정하기를 writer 컬럼은 not-null로 설정해서
업데이트 할때에도 넣어줘야 하나보드라구요. 수정이 필요없는 데이터까지 억지로 넣어줘야 하는..
할튼 그 방법은 좀 별로인듯 싶네요.

그리고 이 방법을 쓰려면 equals 메서드를 구현해줘야 한다는거 같네요.
그건.. 예전 설정 파일에서 mata 속성을 설정했던적이 있는데 저 상태로 generation하면
도메인 객체에 저 메서드들이 오버라이딩 된다고 했었습니다.



이런식으로 오버라이딩 되서 만들어집니다.
이 메서드가 없다면 위 방식의 업데이트는 이루어지지 않습니다.



Delete부분은 Update와 같기때문에... 알아서;;

정말 기본적인 CRUD 해봤는데 아직 하이버네이트에 기능들을 다 몰라서 이정도뿐이 안되는군요.
일단 여기서는 HQL을 쓰지 않았습니다.

공부.. 해도 해도 끝이 없습니다.... ㅅㅂ;;

'Database > Hibernate' 카테고리의 다른 글

큐브리드 foreign key.....  (0) 2010.07.04
Hibernate Log4j 설정.  (0) 2009.10.24
SchemaExport.  (0) 2009.10.24
Hibernate Code Generation..  (0) 2009.10.23
Hibernate 도전!  (0) 2009.10.22
이전 맵핑 설정 / Generation 보기.

하이버네이트 설정... sessionFactory 얻어오기.. 그리고 도메인 객체까지 Generation 했습니다.
그것을 바탕으로 DB 스키마 생성을 해보도록 하겠습니다.

비교적 간단합니다.

sc.create(false, true);


첫번째 인자값은 script를 확인 할껀지..
두번째 인자값은 실제 DB에 스키마를 생성할껀지 조건입니다.



Junit으로 실행 후 실제 DB 확인 결과 앞전에 board.hbm.xml 에 설정했던대로 테이블이 생성됬습니다.



이번에는 sql문을 확인해보겠습니다.


이런식으로 콘솔창에서 확인해볼수 있습니다. 근데 각 쿼리문에 ';' 이 빠졌네요.

실행해서 확인된 쿼리문은 hibernate.cfg.xml에서 mapping resource에 등록된 맵핑 파일에 대해서만 출력합니다.

이번엔 쿼리문 확인과 그 sql 쿼리문을 파일로 저장해보겠습니다.


sc.setDelimiter(";"); // 각 쿼리문에 ';' 추가.
sc.setOutputFile("src/schema.sql"); // 저장 위치 지정.
sc.create(true, false); // DB와 상관없이 스크립트 관련해서 생성합니다.

CRUD Test.

'Database > Hibernate' 카테고리의 다른 글

큐브리드 foreign key.....  (0) 2010.07.04
Hibernate Log4j 설정.  (0) 2009.10.24
CRUD Test.  (0) 2009.10.24
Hibernate Code Generation..  (0) 2009.10.23
Hibernate 도전!  (0) 2009.10.22
이전 하이버네이트 설정 보기.

맵핑 파일을 자바 코드로 만드는 방법입니다.
일단 맵핑 파일을 작성해야 합니다.


 여지껏 해오던 간단한 게시판을 작성해보겠습니다.

작성방법은 그리 어렵지 않습니다. id는 Primary Key 정도로 생각하시면 되고,
property는 실제 모델 객체에 데이터라고 보시면 되요. 물론 그 안에 DB 컬럼 같이 하면되구요.



제일 처음에 설정 파일 내용에 맵핑파일을 추가해주세요.


그러면 아래와 같이 클래스 Board가 인식되야 합니다.




그러면 이제 자바 코드로 변환할 수 있습니다.




프로젝트를 지정하고 코드로 변환할 곳을 지정합니다.
src로 하면 되고 패키지 경로는 설정 파일에 명시되어 있었죠..




Domain code를 선택하고 Java 5 버전 syntax를 사용합니다.



Apply -> Run 하게 되면..



저렇게 자바 파일이 생성됩니다. 내용은 직접 Generator해서 확인하기 바랍니다.

Schema 생성하기.

'Database > Hibernate' 카테고리의 다른 글

큐브리드 foreign key.....  (0) 2010.07.04
Hibernate Log4j 설정.  (0) 2009.10.24
CRUD Test.  (0) 2009.10.24
SchemaExport.  (0) 2009.10.24
Hibernate 도전!  (0) 2009.10.22
그나마 iBATIS를 쪼금 쓸줄 알겠다 싶었더니.. 왠걸 하이버네이트를 배우게 되었다....
일단 모르는것 투성이인 상태로 블로깅 하게 된점 정말 안타깝고 혹시라도 이 글을 보시는 분들께 죄송하단 말씀드려요 ^^;;
(
조언이라도 좀 해주시던가! ㅋ)

테스트 환경은 예전부터 해오던.. Dyna...Web... Proj...t 에서.. 해봤습니다.

앞으로도 계속 스프링 기반으로 웹 프로젝트를 공부할꺼라서 기존 라이브러리에 추가했는데..
hibernate3.jar만 추가하면 되는가 싶었는데 실행해보니 모가 없다고 에러나서
에러에 맞게 라이브러리 추가해보았습니다. (헛.. 맨 위 dom4j도 없으면 안되요 ^^)



hibernate tool을 설치했다면 저런 메뉴가 있을겁니다. Configuration 파일을 먼저 생성합니다.



설정파일은 WEB-INF에 위치할것이며 아래처럼 아는부분만 일단 입력했습니다.
저는 Driver class 셀렉트 박스에 아무것도 없어서 직접 쳤습니다.
그러니까 Connection Url은 셀렉트박스에서 선택 가능하더군여;;

제일 아래 Create a console.... 꼭 체크 ^^



아래와 비슷한 내용의 설정 파일이 생성됬을겁니다. 그 외에 없는 내용은 추가적으로 넣었습니다.
보면 아시겠지만 정확히는 모릅니다. 앞으로 공부해야겠죵~

* hibernate.hbm2ddl.auto
 create : sessionFactory가 작동할때 스키마를 삭제하고 다시 생성.
 create-drop : sessionFactory가 끝날때 스키마 삭제.
 update : 도메인 객체와 DB 스키마를 비교해 변경된 내용이 있으면 도메인 객체에 맞춰 스키마 변경
             (근데 해봐도 안됨 ;; 둘중에 하나라도 틀리면 에러 토해냄.. 어떻게 하는건지 ^^)
 validate : sessionFactory 시작할때 도메인 객체와 DB 스키마가 같은지 확인.



그러면 저 설정파일로 sessionFactory[각주:1]를 가져올수 있는지 테스트 해봅니다.
Junit3.8.2 버전으로 테스트 했습니다.



Junit도.. 아직 어색하네요 ^^;;



예상했던데로 정상 실행 되는군여..


hibernate.cfg.xml 파일이 src폴더에 있다면 이렇게 해도 됩니다.
conf = new configuration().configure();

Mapping File 작성 방법 보기.

  1. 바이트 코드 프로세싱이나 코드 생성이 아니라, 하이버네이트는 클래스의 퍼시스턴스 프로퍼티를 얻어오기 위해서 런타임 리플렉션을 이용한다. 저장되는 객체는 퍼시스턴스 필드와 필드 간의 관계에 대한 정보를 제공하는 매핑(mapping) 문서에 정의가 된다. 매핑 문서는 애플리케이션이 동작하면 컴파일되고, 클래스에 필요한 정보를 가진 프레임워크를 제공한다. 뿐만 아니라 매핑 문서는 데이터베이스 스키마 또는 Stub 자바 소스 파일생성 등의 기능을 이용할 때 사용된다. 매핑 문서의 컴파일된 컬렉션으로부터 SessionFactory 객체가 생성된다. SessionFactory는 Session 인터페이스로 퍼시스턴스 클래스를 관리하기 위한 매커니즘을 제공한다. Session 클래스는 퍼시스턴스 데이터 저장과 애플리케이션 간의 인터페이스를 제공한다. Session 인터페이스는 JDBC 연결을 래핑(wrapping)하고 있다. 이 JDBC 연결은 사용자에 혹은, 하이버네이트로부터 관리될 수 있다. [본문으로]

'Database > Hibernate' 카테고리의 다른 글

큐브리드 foreign key.....  (0) 2010.07.04
Hibernate Log4j 설정.  (0) 2009.10.24
CRUD Test.  (0) 2009.10.24
SchemaExport.  (0) 2009.10.24
Hibernate Code Generation..  (0) 2009.10.23

+ Recent posts