주석을 통해 Hibernate UUIDGenerator 사용
내 uuid를 다음과 같이 사용하고 있습니다.
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;
하지만 똑똑한 Hibernate 경고가 나타납니다.
IETF RFC 4122 호환 UUID 값을 생성하지 않는 org.hibernate.id.UUIDHexGenerator 사용 대신 org.hibernate.id.UUIDGenerator 사용을 고려하십시오.
그래서 나는로 전환하고 싶습니다 org.hibernate.id.UUIDGenerator
. 이제 내 질문은 Hibernate의 생성기에 어떻게 알려야 하는가입니다. 나는 어떤 사람이 그것을 "hibernate-uuid"로 사용하는 것을 보았다-그래서 이것은 내가 시도한 것이지만 부정적인 결과가있다.
@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "hibernate-uuid", strategy = "hibernate-uuid")
@Column(name = "uuid", unique = true)
private String uuid;
다음과 같아야합니다 uuid2
.
...
@GenericGenerator(name = "uuid", strategy = "uuid2")
...
5.1.2.2.1을 참조하십시오 . 다양한 추가 발전기 .
HibernateDoc 은 다음을 사용할 수 있다고 말합니다.
@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;
Hibernate 3.5를 사용하시기 바랍니다.
시험...
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "uuid", columnDefinition = "BINARY(16)")
public UUID getId()
{
return id;
}
public void setId(UUID i)
{
id = i;
}
"uuid"가 아니라 "uuid2"에 유의하십시오.
@natan이 주석에서 지적했듯이 Hibernate 5를 사용하는 경우 아래 코드로 충분합니다.
@Id
@GeneratedValue
private java.util.UUID id;
MySQL id
의 유형으로 열을 정의 BINARY(16)
하거나 다른 SQL 구현과 동일합니다.
알 수없는 ID 생성기 : hibernate-uuid
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "id", unique = true)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
이것은 UUID v4를 사용하고 자동 생성 된 uuid는 평소와 같이 열에 저장됩니다 varchar(36)
.
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(length = 36)
private String uuid;
이는 성능에 약간의 영향을 미칩니다.
- 소비 된 크기는
BINARY(16)
- 수화 후
java.lang.String
인스턴스 소비하는 메모리보다java.util.UUID
: 32 바이트 (두 걷고 즉 + OBJ 헤더) 대 문자열 UUID 112 바이트UUID
.
그러나 문자열 UUID로 작업하는 것이 훨씬 더 쉽습니다. 쿼리를 작성하기 쉽고 테이블의 내용을 볼 수 있습니다.
Hibernate 5.3에서 테스트 됨
현재 5.4.2 Hibernate 버전에서는
if you want a Human-Readable varchar(36) field in the database table,
but also a Serializable UUID data type in your Java Class,
you can use @Type(type = "uuid-char")
at the same time you declare your field member with java.util.UUID
type.
Note that @Column(length = 36)
is important to reduce from 255 to 36 the field length in MySQL.
Note that with PostgreSQL you should use @Type(type = "pg-uuid")
instead.
import org.hibernate.annotations.Type
import java.util.UUID
import javax.persistence.Column
import javax.persistence.GeneratedValue
import javax.persistence.Id
@Id @GeneratedValue
@Type(type = "uuid-char") @Column(length = 36)
private UUID id;
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "UUID_ID")
public String getId(){
return id;
}
This is the proper way to use annotation for uuid generators in Hibernate 5.0.11.FINAL.
Note: IT is deprecated.
참고URL : https://stackoverflow.com/questions/6356834/using-hibernate-uuidgenerator-via-annotations
'code' 카테고리의 다른 글
다양한 RAISERROR 심각도 수준은 무엇을 의미합니까? (0) | 2020.11.05 |
---|---|
멀티 태스킹, 멀티 스레딩 및 멀티 프로세싱의 차이점은 무엇입니까? (0) | 2020.11.04 |
Postgres 9.1 vs Mysql 5.6 InnoDB? (0) | 2020.11.04 |
입력 유형 = "파일"대화 상자를 특정 파일 유형별로 필터링하는 방법은 무엇입니까? (0) | 2020.11.04 |
Vagrant 프로비저닝 후 사용자로 명령 실행 (0) | 2020.11.04 |