반응형

2018/03 8

[Hibernate] 8. Hibernate(하이버네이트) 기타 등등

기타 Composite ID , Composite Primary Key 복합키로 여러개의 컬럼이 하나의 Key가 되는 형태이다. 아래는 아파트 테이블로 동/호수, 소유자 이름 컬럼을 갖는다. 동/호수가 Primary Key이다. APT_DONG 과 APT_HO 가 복합키를 구성한다. CREATE TABLE `DB_TEST`.`Apartment` ( `APT_DONG` INT NOT NULL COMMENT '', `APT_HO` INT NOT NULL COMMENT '', `APT_OWNER_NAME` VARCHAR(45) NULL COMMENT '', PRIMARY KEY (`APT_DONG`, `APT_HO`) COMMENT '') ENGINE = InnoDB DEFAULT CHARACTER SET =..

[Hibernate] 7. Hibernate(하이버네이트) HQL

HQL 사용하기 HQL은 SQL과는 거의 비슷하다. 다른 점이라면 테이블명이나 컬럼명을 쓰는 것이 아니라 맵핑 된 클래스명과 멤버변수명을 쓰는 것이다. 그리고 테이블과 맵핑된 클래스명을 쓸때는 Alias 를 꼭 써야한다. HQL을 쓰면 SQL로 맵핑되고 그 결과가 다시 맵핑 클래스로 맵핑되는 형태이다. 즉 HQL의 결과는 클래스로 맵핑된다. 예제 데이터 간단한 예제를 위해 foreigne key등 Constraint(제약조건)은 무시, 정규화 무시. 학생, 과목, 과목별점수 테이블로 이루어진 예제이다. 이 예제를 바탕으로 몇가지 HQL 예제를 확인할 것이다. 스키마 및 데이터(mysql): DROP TABLE IF EXISTS `Course`; CREATE TABLE `Course` ( `ID` int(..

[Hibernate] 6. Hibernate(하이버네이트) 테이블 관계 - Many To Many

ManyToMany People 과 club 의 관계이다. 한 people은 여러 club 에 가입가능하고 한 club도 여러 people을 가입 받을 수 있다. CREATE TABLE `people` ( `PEOPLE_ID` int(11) NOT NULL AUTO_INCREMENT, `PEOPLE_NAME` varchar(45) NOT NULL, PRIMARY KEY (`PEOPLE_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `club` ( `CLUB_ID` int(11) NOT NULL AUTO_INCREMENT, `CLUB_NAME` varchar(45) NOT NULL, PRIMARY KEY (`CLUB_ID`) ) ENGINE=InnoDB..

[Hibernate] 5. Hibernate(하이버네이트) 테이블 관계 - One To Many ( 중간 관계 테이블 있을 시)

OneToMany-ManyToOne (관계 테이블 있을시) OneToMany 관계에서 중간테이블이 있는 형태는 ManyToMany와동일한 관계이다. OneToMany 관계를 만들기 위해 중간 관계 테이블 인 people_car 의 pc_car_id를 unique로 설정하였다. people_car 의 컬럼명 접두사에 "PC_"를 넣은 것은 관계 맵핑시 컬럼명을 정확히 구분하여 예제를 만들고 싶었던 이유다. CREATE TABLE `people` ( `PEOPLE_ID` int(11) NOT NULL AUTO_INCREMENT, `PEOPLE_NAME` varchar(45) NOT NULL, PRIMARY KEY (`PEOPLE_ID`) ) ENGINE=InnoDB AUTO_INCREMENT=205 DEFA..

[Hibernate] 4. Hibernate(하이버네이트) 테이블 관계 - One To Many ( 중간 관계 테이블 없을 시)

OneToMany-ManyToOne (관계 테이블 없을 시) OneToMany와 ManyToOne은 두가지 경우가 있다. 관계테이블 없음 : 관계테이블 없이 Many쪽에서 참조컬럼을 갖는 경우 관계테이블 있음 : One과 Many를 연결해주는 중간 관계 테이블있고 중간 관계 테이블에서 Many 쪽이 참조 값이 Unique인 경우 각 테이블간의 결합성을 없애려고 한다면 중간 관계테이블을 두는게 좋고 아니라면 중간 관계테이블 없이 하는 것이 좋다. OneToMany 관계에서 조심해야 될 듯은 Many가 너무 많은 갯수를 가진다면 성능상 부하가 엄청날 것이다. 예를 들어 게시판의 글쓴이와 글의 관계라고 해보자 글쓴이가 쓴 글이 엄청 많다면 문제가 생긴다. 이때는 OneToMany 관계맵핑 자체를 하면 안되고 ..

[Hibernate] 3. Hibernate(하이버네이트) 테이블 관계 - One To One

OneToOne 관계 CREATE TABLE `people` ( `PEOPLE_ID` int(11) NOT NULL AUTO_INCREMENT, `PEOPLE_NAME` varchar(45) NOT NULL, PRIMARY KEY (`PEOPLE_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `people_info` ( `PEOPLE_INFO_ID` int(11) NOT NULL, `PEOPLE_INFO_AGE` int(11) DEFAULT NULL, `PEOPLE_INFO_BIRTHDAY` datetime DEFAULT NULL, PRIMARY KEY (`PEOPLE_INFO_ID`), UNIQUE KEY `PEOPLE_INFO_ID_UNIQUE` ..

[Hibernate] 2. Hibernate(하이버네이트) 테이블 관계 맵핑-단방향/양방향

Hibernate 테이블 관계 맵핑 관계 맵핑은 관계의 종속성이 있고 또한 관계가 많지 않을 때 사용하는 것이 좋다. 예를 들어 OneToMany에서 Many가 진짜 많다면 select에 대해서 엄청난 부하가 발생할 것이다. 관계가 많지 않거나 조건(where)을 통해서 관계가 적은 경우. 부하가 많이 발생하지 않고 해당 관계가 자주 쓰이는 경우에만 관계 맵핑을 하는 것이 좋다. Unidirectional,Bi-directional (단방향,양방향) 단방향, 양방향에 대해 알아보자. 일단 밑의 관계 맵핑을 보고 나서 본다면 더 쉽게 이해할 것이다. 단방향 관계 맵핑에서 단방향은 한쪽에서만의 관계 맵핑이 된 경우이다. A->B 이런 관계이다. A에서 B로의 관계 맵핑만 되어 있어서 A에서는 B를 얻을 수 ..

[Hibernate]1. Hibernate(하이버네이트) ORM 시작 , 예제

참고 http://www.javamakeuse.com/2015/03/tutorial-hibernate-4-subselect-fetching.html https://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/ https://stackoverflow.com/questions/32984799/fetchmode-join-vs-subselect http://kwonnam.pe.kr/wiki/java/jpa/one-to-one https://vladmihalcea.com/the-best-way-to-map-a-onetoone-relationship-with-jpa-and-hibernate/ https://stackoverflow.com/ques..

반응형