code

주석을 통해 Hibernate UUIDGenerator 사용

codestyles 2020. 11. 4. 08:01
반응형

주석을 통해 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

반응형