Hibernate 의 메 인 키 생 성 정책

3205 단어
Hibernate 는 ORM 프레임 워 크 로 메모리 에 있 는 자바 대상 과 데이터베이스 시트 에 기 록 된 대응 관 계 를 구축 하 는 것 이 핵심 역할 입 니 다.
자바 언어 는 메모리 주소 에 따라 서로 다른 대상 을 구분 하고 관계 데이터 베 이 스 는 메 인 키 값 에 따라 같은 표 의 서로 다른 기록 을 구분 합 니 다.그렇다면 하 이 버 네 이 트 는 브로커 로 서 기록 과 대상 간 의 관 계 를 어떻게 구축 할 것 인가?이것 은 POJO 대상 에서 OID (대상 식별 자) 를 유지 함으로써 이 두 가지 모순 을 통일 시 키 는 것 이다.POJO 대상 의 OID 속성 값 은 데이터베이스 에 기 록 된 주 키 값 과 같 습 니 다.즉, 어떤 대상 이 세 션 관리 에 포함 되 더 라 도 OID 를 가 져 야 하 며 그렇지 않 으 면 세 션 이 대상 을 관리 할 수 없다 는 것 이다.
즉, 하 이 버 네 이 트 가 POJO 류 에 OID 속성 을 가 져 야 한다 고 요구 하 는 것 은 어느 정도 하 이 버 네 이 트 가 업무 논리 층 에 대한 침입 이 라 고 할 수 있 지만 어 쩔 수 없 는 일이 다.그래서 보통 Hibernate 저 침입 성!
Hibernate 의 메 인 키 생 성 정책 은 다음 과 같은 몇 가지 가 있 습 니 다.
  • native 은 이 POJO 대상 의 대상 식별 자 OID 가 구체 적 으로 사용 하 는 데이터베이스 에서 생 성 되 었 음 을 나타 낸다.POJO 의 식별 자 유형 은 short, int, long 형식의 데이터 등 정수 형식 만 있 을 수 있 습 니 다.보통 이 걸 메 인 키 로 정책 을 만 듭 니 다!이것 은 구체 적 인 메 인 키 생 성 전략 이 아니 라 핵심 설정 파일 의 방언 에 따라 그 생 성 전략 을 동적 으로 결정 하 는 것 입 니 다. 예 를 들 어 identitysequence.
  • 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 이 방식 은 자신 이 응용 프로그램 에서 수 동 으로 지정 하고 추천 하지 않 습 니 다.

  • 요약 하면 메 인 키 생 성 전략 은 세 가지 로 나 눌 수 있다.
  • 데이터베이스 에서 메 인 키 를 만 드 는 방식 을 결정 하 는데 identitysequence 두 가지 가 있 지만 사용 편 의 를 위해 직접 native 로 대체 하면 된다.
  • 하 이 버 네 이 트 에서 메 인 키 를 만 드 는 방식, 하 나 는 사용 increment, 다른 하 나 는 사용 uuid 방식 이다.
  • 세 번 째 는 프로그램 이 지정 하고 사용 하 는 것 이다 assigned.또는 다른 기록 foreign 방식 에 달 려 있다.

  • 네 이 티 브 메 인 키 생 성 정책xxx.hbm.xml 파일 에서 대상 식별 자 에 게 생 성 정책 을 지정 하 는 설정 방식 은 다음 과 같 습 니 다.
    
        
    
    

    이러한 메 인 키 생 성 방식 은 구체 적 인 데이터베이스 가 필요 하기 때문에 Session 호출 save() 방법 을 사용 할 때 Hibernate 는 insert 문 구 를 실행 하여 대상 의 값 을 데이터베이스 에 삽입 하여 식별 자 를 얻어 야 이 대상 을 Session 캐 시 에 포함 시 켜 관리 할 수 있 습 니 다.
    보충: 메 인 키 는 자연 메 인 키 와 대리 메 인 키 로 나 뉘 는데 자연 메 인 키 는 구체 적 인 업무 의 미 를 가진다. 예 를 들 어 학 번, 신분증 번 호 를 메 인 키 로 한다.프 록 시 키 는 실제 업무 의 의미 가 없 는 것 으로 개발 에 서 는 이런 방식 을 추천 합 니 다.

    좋은 웹페이지 즐겨찾기