Hibernate 의 메 인 키 생 성 정책
자바 언어 는 메모리 주소 에 따라 서로 다른 대상 을 구분 하고 관계 데이터 베 이 스 는 메 인 키 값 에 따라 같은 표 의 서로 다른 기록 을 구분 합 니 다.그렇다면 하 이 버 네 이 트 는 브로커 로 서 기록 과 대상 간 의 관 계 를 어떻게 구축 할 것 인가?이것 은 POJO 대상 에서 OID (대상 식별 자) 를 유지 함으로써 이 두 가지 모순 을 통일 시 키 는 것 이다.POJO 대상 의 OID 속성 값 은 데이터베이스 에 기 록 된 주 키 값 과 같 습 니 다.즉, 어떤 대상 이 세 션 관리 에 포함 되 더 라 도 OID 를 가 져 야 하 며 그렇지 않 으 면 세 션 이 대상 을 관리 할 수 없다 는 것 이다.
즉, 하 이 버 네 이 트 가 POJO 류 에 OID 속성 을 가 져 야 한다 고 요구 하 는 것 은 어느 정도 하 이 버 네 이 트 가 업무 논리 층 에 대한 침입 이 라 고 할 수 있 지만 어 쩔 수 없 는 일이 다.그래서 보통 Hibernate 저 침입 성!
Hibernate 의 메 인 키 생 성 정책 은 다음 과 같은 몇 가지 가 있 습 니 다.
native
은 이 POJO 대상 의 대상 식별 자 OID 가 구체 적 으로 사용 하 는 데이터베이스 에서 생 성 되 었 음 을 나타 낸다.POJO 의 식별 자 유형 은 short, int, long 형식의 데이터 등 정수 형식 만 있 을 수 있 습 니 다.보통 이 걸 메 인 키 로 정책 을 만 듭 니 다!이것 은 구체 적 인 메 인 키 생 성 전략 이 아니 라 핵심 설정 파일 의 방언 에 따라 그 생 성 전략 을 동적 으로 결정 하 는 것 입 니 다. 예 를 들 어 identity
과 sequence
.identity
short, int, long 유형의 메 인 키 에 적용 되 며 데이터베이스 가 제공 하 는 메 인 키 자동 성장 체 제 를 사용 하기 때문에 자체 성장 체 제 를 지원 하 는 데이터베이스 에 만 사용 할 수 있다. 예 를 들 어 MySQL, MSSqlServer, Oracle 은 메 인 키 의 자체 성장 을 지원 하지 않 는 다.sequence
시퀀스 에 적용 되 는 방식 으로 메 인 키 를 생 성 합 니 다. 예 를 들 어 Oracle 데이터 베 이 스 는 이런 방식 을 지원 하고 MySql 은 지원 하지 않 습 니 다.increment
short, int, long 유형의 메 인 키 에 적용 되 는데 이것 은 Hibernate 의 자동 성장 메커니즘 으로 원 리 는 매우 간단 하 다.이것 은 이러한 sql 구문 select max(id) from xx
을 보 내 고 가장 큰 메 인 키 를 찾 은 다음 id + 1 을 다음 기록 의 메 인 키 로 합 니 다.즉, 이 전략 은 데이터베이스 도 자체 성장 을 지원 하도록 요구한다. 예 를 들 어 Oracle 은 안 된다.또한 이 방식 을 사용 하면 스 레 드 안전 문제 가 존재 합 니 다. 만약 에 두 스 레 드 가 같은 id 를 동시에 읽 으 면 혼 란 스 럽 고 전형 적 인 더러 운 데이터 문 제 를 초래 할 수 있 습 니 다.uuid
는 하 이 버 네 이 트 가 UUID 알고리즘 을 사용 하여 OID 를 생 성 한다 고 밝 혔 다.현재 적 용 된 IP 주소, JVM 시작 시간, 시스템 시간, JVM 의 카운터 값 을 일정한 규칙 에 따라 16 바이트 길 이 를 차지 하 는 문자열 을 생 성 합 니 다.POJO 식별 자 타 입 은 String 타 입 일 수 있 으 며, 공간 이 너무 소모 되 어 사용 을 권장 하지 않 습 니 다.foreign
은 다른 대상 의 식별 자 를 현재 대상 의 식별 자로 하 는 것 을 나타 내 며, 일반적으로 대상 의 일대일 관련 메 인 키 맵 에 사용 된다.assigned
이 방식 은 자신 이 응용 프로그램 에서 수 동 으로 지정 하고 추천 하지 않 습 니 다.요약 하면 메 인 키 생 성 전략 은 세 가지 로 나 눌 수 있다.
identity
와 sequence
두 가지 가 있 지만 사용 편 의 를 위해 직접 native
로 대체 하면 된다.increment
, 다른 하 나 는 사용 uuid
방식 이다.assigned
.또는 다른 기록 foreign
방식 에 달 려 있다.네 이 티 브 메 인 키 생 성 정책
xxx.hbm.xml
파일 에서 대상 식별 자 에 게 생 성 정책 을 지정 하 는 설정 방식 은 다음 과 같 습 니 다.
이러한 메 인 키 생 성 방식 은 구체 적 인 데이터베이스 가 필요 하기 때문에 Session 호출
save()
방법 을 사용 할 때 Hibernate 는 insert 문 구 를 실행 하여 대상 의 값 을 데이터베이스 에 삽입 하여 식별 자 를 얻어 야 이 대상 을 Session 캐 시 에 포함 시 켜 관리 할 수 있 습 니 다.보충: 메 인 키 는 자연 메 인 키 와 대리 메 인 키 로 나 뉘 는데 자연 메 인 키 는 구체 적 인 업무 의 미 를 가진다. 예 를 들 어 학 번, 신분증 번 호 를 메 인 키 로 한다.프 록 시 키 는 실제 업무 의 의미 가 없 는 것 으로 개발 에 서 는 이런 방식 을 추천 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.