JPA 및 휴지 상태 사용 시 ID 생성 전략을 선택하는 방법
휴지 상태 참조 가이드의 ID 생성 섹션과 "휴면 상태에서의 자바 지속성"을 살펴보았습니다.
하이버네이트와 JPA를 조합하면, 많은 옵션을 사용할 수 있습니다.
특정 ID 생성 전략을 선택하는 방법에 대한 추가 문서를 찾고 있었습니다.
저도 티핑포인트를 찾고 있어요
예를 들어, hilo 전략은 경합을 줄일 것으로 기대됩니다.나는 이 선택과 관련된 트레이드오프가 있을 것이라고 생각한다.
나는 트레이드오프에 대해 배우고 싶다.
이용할 수 있는 책자가 있나요?
모든 제너레이터는 org.hibernate.id 인터페이스를 구현합니다.Identifier Generator 。이것은 매우 단순한 인터페이스입니다.애플리케이션에 따라서는, 독자적인 실장을 선택할 수도 있습니다만, Hibernate 에서는 다양한 빌트인 실장이 가능합니다.기본 제공 생성기의 바로 가기 이름은 다음과 같습니다.
증량
는 다른 프로세스가 같은 테이블에 데이터를 삽입하지 않는 경우에만 고유한 long, short 또는 int 유형의 식별자를 생성합니다.클러스터에서는 사용하지 마십시오.
신원
는 DB2, MySQL, MS SQL Server, Sybase 및 HypersonicSQL의 ID 열을 지원합니다.반환되는 식별자는 long, short 또는 int 유형입니다.
순서
DB2, Postgre의 시퀀스를 사용합니다.SQL, Oracle, SAP DB, McKoi 또는 Interbase 생성기.반환된 식별자는 long, short 또는 int 유형입니다.
히로
는 hi/lo 알고리즘을 사용하여 hi 값의 소스로서 테이블과 컬럼(디폴트로는 hibernate_time_key 및 next_hi)을 지정함으로써 long, short 또는 int 유형의 식별자를 효율적으로 생성합니다.hi/lo 알고리즘은 특정 데이터베이스에 대해서만 고유한 식별자를 생성합니다.
seqhilo
는 hi/lo 알고리즘을 사용하여 지정된 데이터베이스 시퀀스에 따라 long, short 또는 int 유형의 식별자를 효율적으로 생성합니다.
uuid
는 128비트 UUID 알고리즘을 사용하여 네트워크 내에서 일의인 유형 문자열 식별자를 생성합니다(IP 주소가 사용됩니다).UUID는 32자리 16진수의 문자열로 부호화됩니다.
가이드
는 MS SQL Server 및 MySQL에서 데이터베이스 생성 GUID 문자열을 사용합니다.
원어민
는 기본 데이터베이스의 기능에 따라 ID, 시퀀스 또는 Hilo를 선택합니다.
맡겨진
응용 프로그램은 save()를 호출하기 전에 오브젝트에 식별자를 할당할 수 있습니다.요소가 지정되지 않은 경우 이것이 기본 전략입니다.
선택한다.
는 데이터베이스 트리거에 의해 할당된 프라이머리 키를 취득하기 위해 원하는 키로 행을 선택하고 프라이머리 키 값을 가져옵니다.
외국의
는 연관된 다른 오브젝트의 ID를 사용합니다.보통 프라이머리 키어소시에이션과 함께 사용됩니다.
배열 변형
데이터베이스 시퀀스를 실제 값 생성에 사용하지만 이를 JDBC3 getGeneratedKeys와 조합하여 생성된 식별자 값을 삽입문 실행의 일부로 반환하는 특수한 시퀀스 생성 전략입니다.이 전략은 JDK 1.4용 Oracle 10g 드라이버에서만 지원됩니다. 이러한 삽입문에 대한 설명은 Oracle 드라이버의 버그로 인해 사용할 수 없습니다.
동시 사용자 수가 많지 않은 단순한 애플리케이션을 구축하는 경우 증분, ID, hilo 등을 선택할 수 있습니다.이들은 설정이 간단하고 DB 내에서 많은 코딩이 필요하지 않습니다.
데이터베이스에 따라 시퀀스 또는 GUID를 선택해야 합니다.이것들은 안전하고 더 좋다. 왜냐하면id생성은 데이터베이스 내에서 이루어집니다.
업데이트: 최근 warapper type(int) 대신 Integer를 사용하여 privitive type(int)을 수정하는 Identity 문제가 발생했습니다.
기본적으로 다음 두 가지 주요 선택지가 있습니다.
- ID를 직접 생성할 수 있습니다.이 경우 할당된 ID를 사용할 수 있습니다.
- .
@GeneratedValue주석 및 휴지 상태에서는 식별자가 할당됩니다.
생성된 식별자에는 다음 두 가지 옵션이 있습니다.
- UUID 식별자
- 숫자 식별자
숫자 식별자의 경우 다음 세 가지 옵션이 있습니다.
IDENTITY를 사용할 수 없는 경우에만 좋은 선택입니다.SEQUENCE( MySQL ) JDBC ( ( ( ( 。
SEQUENCE는 특히 또는 와 같은 식별자 옵티마이저와 함께 사용하는 경우 권장되는 옵션입니다.
TABLE는 개별 트랜잭션을 사용하여 식별자와 행 수준의 잠금을 가져오므로 피해야 합니다.
얼마 전 저는 Hibernate 키 생성기에 대한 자세한 기사를 썼습니다.http://blog.eyallupu.com/2011/01/hibernatejpa-identity-generators.html
올바른 제너레이터를 선택하는 것은 복잡한 작업이지만, 가능한 한 빨리 올바른 제너레이터를 선택하는 것이 중요합니다.이행을 늦게 하는 것은 악몽이 될 수 있습니다.
주제를 조금 벗어났지만 API를 통해 애플리케이션 간에 키를 공유하는 것이 보통 간과되는 점을 제기할 수 있는 좋은 기회입니다.개인적으로는 항상 대리 키를 선호하며, 다른 시스템과 객체를 통신할 필요가 있는 경우에는 (대리 키를 사용하더라도) 키를 노출하지 않고 '외부 키'를 추가로 사용합니다.컨설턴트로서 오브젝트 키를 사용한 '훌륭한' 시스템 통합('그냥 사용하자'는 접근법)을 1~2년 후에 본 적이 있습니다.그것은 내부 키를 공개하기 위해서, 어느 한쪽이 키 범위에 문제가 있는 것을 발견하기 위해서입니다.키를 노출하는 것은 코드의 기본적인 측면을 외부 제약에 노출해서는 안 된다는 것을 의미합니다.
이 강의는 https://vimeo.com/190275665,의 포인트 3에서 매우 유용하다고 생각합니다.이들 생성기를 요약하고 각각의 생성기를 사용할 때 퍼포먼스 분석과 가이드라인을 제공합니다.
언급URL : https://stackoverflow.com/questions/10041938/how-to-choose-the-id-generation-strategy-when-using-jpa-and-hibernate
'it-source' 카테고리의 다른 글
| 터미널(iOS)에서 React Native App 실행 중 오류 (0) | 2023.01.03 |
|---|---|
| 버전 X와 버전 Y 사이에 PHP 버전이 필요하도록 Composer 강제 설정 (0) | 2023.01.03 |
| Conda를 사용하여 Python 3.6으로 업그레이드하려면 어떻게 해야 하나요? (0) | 2023.01.03 |
| 각도로 $on 및 $120 (0) | 2023.01.03 |
| to_sql 및 sqlalchemy를 사용한 mariadb 데이터베이스로의 panda 데이터 프레임 (0) | 2022.12.29 |