Hibernate 4 의 메 인 키 맵 메커니즘
13594 단어 Hibernatejpa홈 키 생 성 정책
관계 형 데이터 베 이 스 는 메 인 키 에 의 해 서로 다른 기록 을 구분 하고 메 인 키 는 자연 메 인 키 와 프 록 시 메 인 키 의 구분 이 있다.자연 키: 메 인 키 를 충당 하 는 필드 자체 가 일정한 의 미 를 가지 고 기록 을 구성 하 는 중요 한 구성 부분 을 말한다.프 록 시 메 인 키: 메 인 키 필드 자체 가 업무 적 의 미 를 가지 지 않 고 표지 역할 만 하 는 것 을 말한다. 예 를 들 어 자체 성장 유형의 ID 등 이다.Hibernate 응용 프로그램 에서 프 록 시 키 를 사용 하 는 것 을 적 극 추천 합 니 다.Hibernate 에서 Hibernate 는 대상 식별 자 (OID) 에 의존 하여 서로 다른 지구 화 대상 을 구분한다.대상 식별 자 (OID) 는 Hibernate 에 내 장 된 표지 생 성 기 를 통 해 생 성 할 수 있다.여기 서 토론 하 는 것 은 프 록 시 키, 업무 키 (예 를 들 어 복합 키 등) 입 니 다. 여기 서 토론 하지 않 습 니 다.1. JPA 유 니 버 설 정책 생 성 기 는 Annotation 을 통 해 hibenate 실 체 를 매 핑 합 니 다. Annotation 을 바탕 으로 하 는 hibenate 메 인 키 표 지 는 @ Id 이 고 그 생 성 규칙 은 @ Generated Value 에 의 해 설정 되 었 습 니 다. 이곳 의 @ id 와 @ Generated Value 는 모두 JPA 의 표준 용법 입 니 다. JPA 는 네 가지 표준 용법 을 제공 합 니 다. @ Generated Value 의 소스 코드 에서 뚜렷하게 볼 수 있 습 니 다.
@Target({METHOD,FIELD})
@Retention(RUNTIME)
public @interface GeneratedValue{
GenerationType strategy() default AUTO;
String generator() default "";
}
그 중 Generation Type:
public enum GenerationType{
TABLE,
SEQUENCE,
IDENTITY,
AUTO
}
JPA 에서 제공 하 는 네 가지 표준 용법:
TABLE
메 인 키 를 저장 하기 위해 서 특정한 데이터베이스 시트 를 사용 하 십시오.
SEQUENCE
베이스 데이터베이스 시퀀스 에 따라 메 인 키 를 생 성 합 니 다. 조건 은 데이터베이스 지원 시퀀스 입 니 다.
IDENTITY
홈 키 는 데이터베이스 에서 자동 으로 생 성 됩 니 다 (주로 자동 성장 형)
AUTO
마스터 키 는 프로그램 에 의 해 제어 된다.
1、TABLE
@Entity
@Table(name = "TAB_PLAYER")
@TableGenerator(name = "tab-store", table = "AUTO_ID_GENERATOR",
pkColumnName = "G_KEY", pkColumnValue = "TAB_PLAYER_PK",
valueColumnName = "G_VALUE", allocationSize = 1)
public class Player {
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "tab-store")
@Column(unique = true, nullable = false) //unique ,nullable
public Long getId() {
return id;
}
......
}
원본 코드 에서 @ TableGenerator 가 어떻게 정의 되 는 지 보 세 요.
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface TableGenerator {
String name();
String table() default "";
String catalog() default "";
String schema() default "";
String pkColumnName() default "";
String valueColumnName() default "";
String pkColumnValue() default "";
int initialValue() default 0;
int allocationSize() default 50;
UniqueConstraint[] uniqueConstraints() default {};
}
그 중에서 속성 설명: name 속성 은 이 표 의 메 인 키 생 성 정책 의 이름 을 표시 합 니 다. @ Generated Value 에 설 치 된 "generator" 값 에 사 용 됩 니 다.table 속성 은 표 생 성 정책 이 지속 되 는 표 이름 을 표시 합 니 다. 예 를 들 어 이 표 는 데이터베이스 에 있 는 'tb generator' 를 사용 합 니 다.catalog 속성 과 schema 는 표 가 있 는 디 렉 터 리 이름 이나 데이터베이스 이름 을 구체 적 으로 지정 합 니 다.pkColumnName 속성의 값 은 지구 화 표 에 있 으 며, 이 메 인 키 는 정책 에 대응 하 는 키 의 이름 을 생 성 합 니 다.예 를 들 어 "tb generator" 에서 "gen name" 을 메 인 키 로 하 는 키 값 valueColumnName 속성의 값 을 지구 화 표 에 표시 합 니 다. 이 메 인 키 는 현재 생 성 된 값 을 만 들 때마다 누적 합 니 다.예 를 들 어 "tb generator" 에서 "gen value" 를 메 인 키 의 값 으로 pkColumnValue 속성의 값 을 지구 화 표 에 표시 하고 이 생 성 정책 에 대응 하 는 메 인 키 를 표시 합 니 다.예 를 들 어 'tb generator' 표 에서 'gen name' 의 값 을 'CUSTOMER PK' 로 한다.initial Value 는 메 인 키 의 초기 인식 값 을 표시 합 니 다. 기본 값 은 0 입 니 다.allocationSize 는 메 인 키 값 이 증가 할 때마다 크기 를 표시 합 니 다. 예 를 들 어 1 로 설정 하면 새 기록 을 만 들 때마다 자동 으로 1 을 추가 하고 기본 값 은 50 입 니 다.UniqueConstraint 는 @ Table 태그 의 용법 과 유사 합 니 다.
2、SEQUENCE
@Entity
@Table(name = "SMS_DEPT")
@SequenceGenerator(name="MyTableGenerator",sequenceName="SEQ_SMS_DEPT")
public class Dept {
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="MyTableGenerator")
@Column(unique = true, nullable = false)
public Long getId() {
return id;
}
......
소스 코드 에서 @ SequenceGenerator 가 어떻게 정의 되 는 지 보 세 요.
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface SequenceGenerator {
String name();
String sequenceName() default "";
int initialValue() default 0;
int allocationSize() default 50;
}
name 속성 은 이 표 의 메 인 키 생 성 정책 의 이름 을 표시 합 니 다. @ Generated Value 에 설 치 된 "generator" 값 에 사 용 됩 니 다.sequenceName 속성 은 생 성 정책 에 사용 할 데이터베이스 시퀀스 이름 을 표시 합 니 다.initial Value 는 메 인 키 의 초기 인식 값 을 표시 합 니 다. 기본 값 은 0 입 니 다.allocationSize 는 메 인 키 값 이 증가 할 때마다 크기 를 표시 합 니 다. 예 를 들 어 1 로 설정 하면 새 기록 을 만 들 때마다 자동 으로 1 을 추가 하고 기본 값 은 50 입 니 다.
3、IDENTITY
데이터베이스 가 SQL SERVER 일 때 IDENTITY 를 사용 할 수 있 습 니 다.
@Entity
@Table(name = "SMS_DEPT")
public class Dept {
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
public Long getId() {
return id;
}
......
4、AUTO
홈 키 를 지정 할 때 홈 키 생 성 정책 을 지정 하지 않 으 면 기본 값 은 AUTO 입 니 다.
@Entity
@Table(name = "SMS_DEPT")
public class Dept {
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
......
Hibernate 메 인 키 정책 생 성기
hibenate 는 다양한 메 인 키 생 성 전략 을 제공 합 니 다. JPA 와 유사 합 니 다. 어떤 것 은 hibenate 특유 입 니 다.
생 성기
묘사 하 다.
native
바 텀 데이터 베 이 스 는 자동 으로 OID 를 생 성 하 는 능력 에 대한 지원 에 따라 idenity, sequence 또는 hilo 생 성 기 를 구체 적 으로 선택 하여 OID 를 생 성 합 니 다. 크로스 플랫폼 응용 에 자주 사용 되 고 Oacle 에 대해 Sequence 방식 을 사용 하 며 MySQL 과 SQL Server 에 대해 idenity (자체 키 생 성 메커니즘 증가) 를 사용 합 니 다. native 는 메 인 키 의 생 성 작업 을 데이터베이스 에 맡 기 는 것 입 니 다. hibenate 는 상관 하지 않 습 니 다.(자주 사용)
uuid
128 비트 uid 알고리즘 을 사용 하여 메 인 키 를 만 듭 니 다. uid 는 32 비트 16 진수 문자열 로 인 코딩 됩 니 다. 공간 이 넓 습 니 다 (문자열 형식).
hilo
hilo 생 성 정책 을 사용 하여 데이터베이스 에 추가 표를 만 들 려 면 기본 표 이름 은 hibenate unique key 이 고 기본 필드 는 integer 형식 이 며 이름 은 next hi (적 게 사용) 입 니 다.
assigned
데 이 터 를 삽입 할 때 홈 키 는 프로그램 에서 처리 합 니 다 (자주 사용). 이것 은 요소 가 지정 되 지 않 았 을 때의 기본 생 성 정책 입 니 다. JPA 의 AUTO 와 같 습 니 다.
identity
OID 는 MySql 의 auto increment 타 입 메 인 키 와 SQL SERVER 의 idenity 타 입 메 인 키 와 같은 기본 데이터베이스 자체 증가 메 인 키 생 성 메커니즘 에서 생 성 됩 니 다. 이 방법 은 Oracle 에 넣 을 수 없습니다. Oracle 은 자체 증가 필드 를 지원 하지 않 습 니 다.
select
트리거 를 사용 하여 메 인 키 생 성 (초기 데이터베이스 메 인 키 생 성 메커니즘 에 사용 되 며 적 게 사용)
sequence
기본 데이터베이스 의 시퀀스 를 호출 하여 메 인 키 를 만 듭 니 다. 시퀀스 이름 을 설정 해 야 합 니 다. 그렇지 않 으 면 hibenate 에서 찾 을 수 없습니다.
seqhilo
hilo 알고리즘 을 통 해 이 루어 지지 만 메 인 키 의 역 사 는 Sequence 에 저장 되 어 Sequence 를 지원 하 는 데이터베이스 에 적 용 됩 니 다. 예 를 들 어 Oracle (적 게 사용)
increment
OID 는 Hibernate 에서 점차 증가 하 는 방식 으로 생 성 됩 니 다. 이 알고리즘 은 현재 응용 인 스 턴 스 의 최대 값 변수 에 의존 합 니 다. 여러 개의 응용 인 스 턴 스 가 데이터 베 이 스 를 방문 해 야 할 때 중복 되 는 메 인 키 가 나타 날 수 있 으 므 로 신중하게 사용 해 야 합 니 다.
foreign
다른 연 결 된 대상 의 메 인 키 를 사용 합 니 다. 일반적으로 연합 하여 사용 합 니 다.
guid
데이터베이스 밑 에 있 는 guid 알고리즘 체 제 를 사용 하여 MYSQL 의 uid () 함수, SQL Server 의 new id () 함수, ORACLE 의 rawtohex (sys guid () 함수 등 을 대응 합 니 다.
uuid.hex
같은 이치 의 uid, uid 로 교체 하 는 것 을 권장 합 니 다.
sequence-identity
sequence 정책 의 확장, 즉시 검색 정책 으로 sequence 값 을 가 져 오 려 면 JDBC 3.0 과 JDK 4 이상 (1.4 포함) 버 전이 필요 합 니 다.
사용자 정의 메 인 키 생 성 정책 은 @ GenericGenerator 에서 실 현 됩 니 다. hibenate 는 JPA 를 기반 으로 확장 되 었 습 니 다. hibenate 만 의 메 인 키 생 성 정책 을 도입 할 수 있 습 니 다. @ GenericGenerator 를 통 해 추 가 된 것 입 니 다. 예 를 들 어 JPA 표준 용법 입 니 다.
@Id
@GeneratedValue(GenerationType.AUTO)
hibenate 특유 의 다음 과 같은 용법 으로 이 루어 질 수 있 습 니 다.
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "assigned")
JPA 원본 코드 에서 @ GenericGenerator 의 정의: name 속성 은 생 성기 이름 을 지정 합 니 다. strategy 속성 은 구체 적 인 생 성기 의 클래스 이름 을 지정 합 니 다. parameters 는 strategy 가 지정 한 구체 적 인 생 성기 에 사용 할 인 자 를 얻 습 니 다.
@Target({PACKAGE, TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface GenericGenerator {
/**
* unique generator name
*/
String name();
/**
* Generator strategy either a predefined Hibernate
* strategy or a fully qualified class name.
*/
String strategy();
/**
* Optional generator parameters
*/
Parameter[] parameters() default {};
}
이 hibernate 메 인 키 생 성 정책 과 각각의 구체 적 인 생 성기 간 의 관계 에 대해 org. hibernate. id. IdentifierGenerator Factory 에서 지정 합 니 다. 아래 12 가지 정책 과 native, Hibernate 는 모두 13 가지 생 성 정책 을 기본적으로 지원 합 니 다.
static {
GENERATORS.put("uuid", UUIDHexGenerator.class);
GENERATORS.put("hilo", TableHiLoGenerator.class);
GENERATORS.put("assigned", Assigned.class);
GENERATORS.put("identity", IdentityGenerator.class);
GENERATORS.put("select", SelectGenerator.class);
GENERATORS.put("sequence", SequenceGenerator.class);
GENERATORS.put("seqhilo", SequenceHiLoGenerator.class);
GENERATORS.put("increment", IncrementGenerator.class);
GENERATORS.put("foreign", ForeignGenerator.class);
GENERATORS.put("guid", GUIDGenerator.class);
GENERATORS.put("uuid.hex", UUIDHexGenerator.class); //uuid.hex is deprecated
GENERATORS.put("sequence-identity", SequenceIdentityGenerator.class);
}
1、native
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "native")
2、uuid
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
3、hilo
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "hilo")
4、assigned
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "assigned")
5、identity
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "identity")
6、select
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name="select", strategy="select",
parameters = { @Parameter(name = "key", value = "idstoerung") })
7、sequence
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "sequence",
parameters = { @Parameter(name = "sequence", value = "seq_payablemoney") })
8、seqhilo
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "seqhilo",
parameters = { @Parameter(name = "max_lo", value = "5") })
9、increment
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "increment")
10、foreign
@Entity
public class Employee {
@Id
@GeneratedValue(generator = "idGenerator")
@GenericGenerator(name = "idGenerator", strategy = "foreign",
parameters = { @Parameter(name = "property", value = "info") })
Integer id;
@OneToOne
EmployeeInfo info;
...
}
11、guid
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "guid")
12、uuid.hex
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid.hex")
13、sequence-identity
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "sequence-identity",
parameters = { @Parameter(name = "sequence", value = "seq_payablemoney") })
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JPA] 단방향 연관관계테이블과 컬럼은 결국 엔티티와 필드와 그대로 매핑하기 때문에 매핑방법만 알고 있다면 어렵지 않지만, DB와 JPA는 테이블간의 관계를 표현하는 패러다임에서 큰 차이가 있기 때문에 나 역시 JPA를 처음 접하고 이 부...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.