오늘 우리의 임무는 Hibernate 주제에 대한 두 번째 프로젝트를 완료하는 것입니다. 그 본질은 데이터베이스의 구조를 이해하고 엔터티를 기존 테이블에 매핑하고 매핑이 올바르게 수행되었는지 확인하는 최소한의 기능을 추가하는 것입니다.
이제 더 자세히:
- 덤프 파일을 다운로드 하고 로컬 컴퓨터에 배포합니다. 데이터베이스로는 MySQL 설치 패키지와 함께 예제로 배포되는 테스트 데이터베이스를 사용합니다. 덤프는 데이터베이스 상태를 수정하기 위해 필요합니다. 일, 월, 연도에 변경되지 않을 것이라고 보장할 수 없기 때문입니다.
- 프로젝트 템플릿이 없으므로 직접 프로젝트를 만드십시오. 필요한 모든 종속성이 있는 maven 프로젝트여야 합니다( hibernate-core-jakarta , mysql-connector-java , p6spy ).
- 로컬에 배포된 데이터베이스를 Idea의 데이터 소스로 연결합니다. 그런 다음 Database 탭에서 영화 스키마에 커서를 놓고 키 조합을 누릅니다
Alt+Ctrl+Shift+U
(Ultimate 버전에서만 작동). 그러면 전체 영화 스키마의 구조(열 이름, 키 등 포함)가 표시됩니다. 다음과 같이 보입니다.보기에 그리 편하지 않다는 데 동의합니다. 모든 열과 주석의 제목 표시를 끕니다.
결과적으로 이미 분석할 수 있는 데이터베이스 스키마를 얻게 됩니다.
- 회로가 복잡해 보이지만 모든 것이 그렇게 나쁜 것은 아닙니다. 데이터베이스의 구조를 분석하려면 시작할 위치를 찾아야 합니다. 하나의 정답은 없지만 테이블부터 시작하는 것이 좋습니다
film
. 몇 가지 관계를 예로 들어 보겠습니다.- 테이블 사이의 관계
film
는film_text
명시적인 OneToOne 관계입니다 . 테이블에는 다음과 같은film_text
필드가 있기 때문입니다.film_id
아니다테이블의 ID를 참조합니다film
(외래 키 없음). 그러나 이름과 논리에 따라 이 연결이 있어야 합니다. 또한 테이블에서film_text
필드는film_id
하나의 "영화"가 하나 이상의 "영화 텍스트"에 해당하지 않도록 보장하는 기본 키 역할을 합니다. - 이제 테이블
film
과category
. 논리적으로 영화는 여러 범주를 가질 수 있습니다. 그리고 하나의 범주, 어쩌면 다른 영화일 수도 있습니다. 또한 이 두 테이블 사이에 중간 링크 테이블이 있습니다film_category
. 위의 모든 사항을 기반으로 명시적인 ManyToMany 관계 입니다 . film
우리는 테이블 을 보고language
. 논리의 관점에서 영화는 다른 언어로 번역될 수 있고 다른 영화는 같은 언어로 되어 있을 수 있습니다. 즉, ManyToMany는 자신을 제안합니다 . 하지만 테이블의 내용을 보면film
테이블의 각 행이 고유한 동영상임을 알 수 있습니다. 그리고 줄에는 language_id 필드가 하나만 있습니다 (original_language_id도 있지만 모든 레코드에서 null이므로 무시할 수 있습니다). 즉, 하나의 영화는 하나의 언어만 가질 수 있습니다. 그리고 하나의 언어, 아마도 다른 영화들. 연결은 ManyToOne 입니다 (연결은 영화에서 언어로 향함).
- 테이블 사이의 관계
- 이제 주요 작업은 필요한 모든 엔터티 클래스를 만들고 스키마 테이블에 매핑하는 것입니다
movie
. - 모든 종속 필드를 사용하여 새 고객(고객 테이블)을 생성할 수 있는 메서드를 추가합니다. 거래 방법을 만드는 것을 잊지 마십시오 (구매자의 주소가 데이터베이스에 기록되지만 구매자 자신은 그렇지 않은 상황에 빠지지 않도록).
- "고객이 이전에 대여한 영화를 갔다가 반환함" 이벤트를 설명하는 트랜잭션 메서드를 추가합니다. 원하는 구매자 및 대여 이벤트를 선택하세요. 영화의 등급은 다시 계산할 필요가 없습니다.
- "구매자가 상점(상점)에 가서 그곳에서 임대(임대) 인벤토리(inventory)" 이벤트를 설명하는 트랜잭션 메서드를 추가합니다. 동시에 판매자(스태프)에게 결제(결제)를 했습니다. 필름(재고를 통해) 재량에 따라 선택하십시오. 유일한 제한 사항은 영화를 대여할 수 있어야 한다는 것입니다. 즉, 임대에 재고 기록이 전혀 없거나 이 재고의 마지막 임대에 대한 테이블의 return_date
rental
열이 채워져야 합니다. - "새 영화가 촬영되었고 대여할 수 있게 되었습니다." 이벤트를 설명하는 트랜잭션 메서드를 추가합니다. 영화, 언어, 배우, 카테고리 등은 귀하의 재량에 따라 선택하십시오.
- 테이블 구조는 변경할 수 없습니다. 그러나 개선을 위한 제안을 해야 합니다. 우리는 단락 4에서 한 가지 문제가 있는 위치를 식별했습니다( 테이블 필드 의 테이블에 외래 키 가 없음 ). 데이터베이스 구조에 여전히 그러한 "실수"가 있는지 확인하십시오. 그렇다면 프로젝트의 루트에 readme 파일을 추가하고 이러한 실수를 설명하십시오.
film_text
film_id
film
프로젝트 분석: