기본 키 생성 전략
1. 기본 키의 카테고리
자연의 기본 키
자체 테이블의 기본 키 필드로, 특정 개체의 속성, 개체 자체의 고유 한 속성. 우리는 사람의 ID 번호, 이름, 성별 및 기타 속성이 말하는, ID 번호는 자연의 기본 키로에만 가능합니다.
대리 기본 키
기본 키 테이블 자체는 필수 아닌 우리가 추가로 기본 키에 임의의 문자열 방법을 사용하여 같은 자동 시스템의 성장, 또는를 사용합니다. 그것은 미래에 사용자 필드를 수정하기 위해 우리를 도울 수 있도록 우리가 일반적으로 대리 기본 키를 사용하여 개발. 예를 들어 우리가 학생 데이터를 입력하면 두 학생이 뒤쪽으로 기록 된 숫자를 배울 때 그는 매우 귀찮은 것 학생 정보를 수정로 이동합니다 우리를 원하므로 예를 들어, 우리는 자연의 기본 키 (학생 수)를 사용, 우리는 테이블이기 때문에 두 개의 동일한 기본 키가 나타나지 않을 수 있습니다.
2. 주 키 생성 전략
대리 기본 키를 사용하는 과정에서 수동으로 설정 기본 키에 사용자를 허용 할 수 없습니다 자동으로 생성 된 기본 키를 수행하려고합니다. 일반 데이터베이스는 자동으로 프로그램이 고유 식별자를 생성하게 성장합니다.
준비 과정, 이벤트 내부 주 키 생성 전략의 다양성을 줄이기 위해, 그들을 최대 절전 모드에서 :
-
증가
전략 : 자동 증가 긴, 짧은, INT
참고 : 현재의 방법은 다음 레코드 할당을위한 하나의 기준으로 다음 가장 큰 ID 번호 테이블을 발견하는 것입니다 때문에, 다중 스레드를 사용하지 않는 단일 스레드를 사용. 그래서 때 데이터베이스 쿼리 중 동시에 두 개의 스레드 id 필드 두 개의 스레드가 반드시 두 개의 스레드 ID 삽입 레코드 ID 같은 오류가 발견 동일 하나입니다! -
신원
전략 : 자동 성장
원리 : 자동 데이터베이스 성장 메커니즘 성장 전략을 기본 데이터베이스의 사용. MySQL의 자동 증가, 오라클은 자동으로 증가하지 않습니다. -
시퀀스
전략 : 자동 성장
원리 : 순서의 방법으로는, 순서가 오라클 지원 시퀀스를 지원하는 데 필요한, MySQL은 직렬화를 지원하지 않습니다 -
UUID
정책 : 기본 키를 입력 문자열의 경우
원칙 : 사용하여 임의로 생성 된 문자열은 기본 키를 최대 절전 모드 -
기본
정책 : 로컬 정책
원칙 : 자동 스위치 ID 및 시퀀스 -
할당
전략 : 최대 절전 모드를 사용하면 기본 키를 관리하는 데 도움이되지 않습니다
원칙을 수동으로 기본 키를 생성하기 위해 전화 또는 프로그램에 의해 제공에 :
우리가 일반적으로 기본 사용하는의 개발에, 모두 UUID.
지구력 화
1. 무엇 지속적 영속 클래스 &
지속성이란 무엇인가
프로세스의 메모리 오브젝트 지속성 데이터베이스 (저장). 을위한 프레임 워크 프레임 워크 지속성 최대 절전 모드 데이터를 자동으로 업데이트됩니다 업데이트를 호출하지 않는 개체의 상태가 지속적으로 같은 영속 객체가 자동으로 한 데이터를 업데이트합니다
영속 클래스는 무엇인가
자바 클래스 매핑 관계는 데이터베이스와 함께 설립했다. 자바 클래스 매핑 파일 +
쓰기 규칙 2. 영속 클래스
- 대한 영구 클래스 인수가없는 생성자
인수가없는 생성자가 객체 반사 작성할 수없는 경우 기초 오브젝트는 반사에 의해 생성됩니다 - 내부 private 필드는 할 수 및 설정 방법을 제공
하고 제공하지 않습니다. 최대 절전 모드는 객체의 값을 얻을 수 없습니다 - 개체 지속성 클래스 에 기본 키 대응 사이의 데이터베이스 테이블의 OID 제공
자바가 같은 오브젝트하는 주소 객체에 의해 구별
데이터베이스가 동일한 레코드인지를 구분하기 위해 기본 키를 사용하여
영속 클래스의 OID 속성에 의해 구별 최대 절전 모드에서입니다 이 같은 객체입니다 - 영구 클래스는 속성 패키지 타입의 메이크업 사용
패키지 유형 기본값 NULL
기본 타입 디지털 기본값을 - 영속 클래스가 변형 최종 사용하지 않는
지연과의 관계를로드를 지연 절전 부하 창에 프록시 객체를 최적화 수단. 동적 프록시, 바이트 코드 향상 기술의 하층이 클래스 상속 프록시. 최종 경우 상속 될 수 없습니다, 상속 될 수 없습니다,로드가 무효 인 프록시 객체 지연을 만들 수 없습니다
영속 클래스의 3 부문
더 나은 세 가지 상태로 최대 절전 모드 영속 클래스, 영속 클래스 객체를 관리하기 위해, 완료 영속 클래스의 ORM의 조작에 의한 프레임 워크 지속성 최대 절전 모드 :
주 이름 | 상태 | 구별하는 |
---|---|---|
순간 상태 | 단일 OID가있다 세션 관리하지 않습니다 |
그냥 새로운 객체가 세트 ID를하지 않았다, 그것은 세션에 의해 관리되지 않은 |
영구 상태 | 우리는 고유 한 OID가 세션 관리가를 |
이드가 세션 메소드를 호출하는 세션에 객체는 세션 만 관리했다 |
무료 호스팅 / 주 / 오프라인 상태의 | 우리는 고유 한 OID가이 세션 관리하지 않습니다 |
세션이 폐쇄 될 때 닫을 때 객체는 자유 형식을 처리 |
상태 전이 다이어그램 :
캐시
캐시 무엇, 그것은 최적화 된 방법을 의미한다, 따라서 캐시 (메모리)에 저장된 데이터는 데이터를 가져 우리의 탐구의 효율성을 향상시킬 수있는 데이터 소스 (데이터베이스)가 될 필요가 없습니다. 캐시는 세션의 라이프 사이클에 부합하는 세션 수준이, 그리고 자바 세션 구성하는 일련의 집합 인 것을 특징으로하고, 파티션 캐시와 수준이 캐시가 최대 절전 모드. A는 내장 캐시 제거되지 않습니다 . 차 캐시는 일반적으로 기업에서 자신의 구성은 기본적으로 활성화되어 안 할 SessionFactory에 레벨 캐시이고 지금 레디 스
캐시의 특성 (1)
- 때 경우가 갱신 () 될 saveOrUpdate ()가, 저장 세션 인터페이스 ()를 사용하여 응용 프로그램, 해당하는 세션 객체 캐시가없는 자동으로 캐시에 기록 된 데이터베이스에서 해당 정보를 조회합니다 .
- 당신이 세션 인터페이스 부하를 호출 할 때, () 메소드를 취득하고,리스트 반복자 방법 쿼리 인터페이스는 것 , 그것은 (는) 데이터베이스를 쿼리하지 않습니다, 반환되는 객체가 캐시에 있는지 여부를 확인 에 해당 객체가 캐시를 조회 할 수없는 경우, 그리고 해당 데이터베이스 쿼리 객체들, 그리고 캐시에 추가.
- 당신이 session.close 메서드를 호출 할 때, 캐시는 삭제됩니다
예제를 살펴 보자 :
@Test
public void testSession(){
Session session = HibernateUtil.openSession();
Transaction transaction = session.beginTransaction();
//第一次获取缓存中不存在需要发送sql到数据库中查询
Customer customer1 = session.get(Customer.class, 2L);
System.out.println(customer1);
//第二次获取相同的数据,缓存中已经存在不需要去数据库获取
Customer customer2 = session.get(Customer.class, 2L);
System.out.println(customer2);
System.out.println(customer1 == customer2);
transaction.commit();
session.close();
}
위의 코드의 결과가 실행됩니다 :
당신은 두 번째 이유는 캐시에서 직접 수행 할 수 있습니다 만 우리가 SQL 문을 보낼 수 있도록 최대 절전 모드, 우리가 두 번 같은 레코드에 대한 요청을 보낼 것을 볼 수 있습니다. 그리고 우리는 동일한 개체 중 두 가지를 볼 수 있습니다!
2 캐시 내부 구조
그 중, 캐시 영역 : 스냅 샷 지구
우리는 데이터베이스를 조회하기 위해 ID를 사용하는 경우, 결과는 쿼리 캐시가 세션에 왼쪽 된 최대 절전 모드 것, 그것은 것입니다 스냅 샷을 배치하는 세션에 데이터를 복사 .
세션이 또한 캐시 (플러시)를 정리할 때 우리가) (tr.commit를 사용하는 경우 세션 레벨이 때, 캐시를 청소 Hibernate는 비교를 위해 개체의 캐시 개체 및 스냅 샷의 OID를 사용합니다 속성 변경, 업데이트 문을 두 객체 (object 및 캐시 객체 스냅 샷), 데이터베이스 업데이트하는 경우 , 데이터 영역의 스냅 샷 데이터 캐시로 업데이트되는이 시간, 두 객체의 경우 속성은 다음 업데이트 문을 실행하지 않는, 변경되지 않습니다. 목표는 일관된 데이터 캐시와 데이터베이스를 확인하는 것입니다.
이것은 또한 우리의 상기 설명합니다 데이터가 자동으로 업데이트됩니다 이유는 개체 지속성 상태를 !