10 Eylül 2019 Salı

@GenericGenerator Anotasyonu

Giriş
Şu satırı dahil ederiz.
import org.hibernate.annotations.GenericGenerator;
@GeneratedValue JPA anotasyonu generator alanına değer atanarak kullanılırsa bu anotasyon işe yarar. Açıklaması şöyle
@GenericGenerator is a hibernate annotation used to denote a custom generator, which can be a class or shortcut to a generator supplied by Hibernate.
Hibernate bazı generator'leri şu isimle tanımlar
static {
    GENERATORS.put("uuid", UUIDHexGenerator.class);     // "deprecated" for new use
    GENERATORS.put("hilo", TableHiLoGenerator.class);   // removed in Hibernate 5
    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);
}
Şu generator'leri sağlar.
register("uuid2", UUIDGenerator.class);
register("enhanced-sequence", SequenceStyleGenerator.class);
register("enhanced-table", TableGenerator.class);
hilo
Örnek
Şöyle yaparız
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "hilo")
@GenericGenerator(name = "hilo",
                  strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
                  parameters = {
                    @Parameter(name = "sequence_name", value = "hilo_sequence"),
                    @Parameter(name = "initial_value", value = "1"),
                    @Parameter(name = "increment_size", value = "100"),
                    @Parameter(name = "optimizer", value = "hilo")
                }
)
private Long id;
uuid Generator - Kullanmayın 
UUIDHexGenerator Sınıfı yazısına bakabilirsiniz.

SequenceStyleGenerator
SequenceStyleGenerator yazısına bakabilirsiniz.

name Alanı
Örnek - increment
Şöyle yaparız.
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment") 
Long id;
Örnek - sequence
Şöyle yaparız.
@Id
@GenericGenerator(name="honeySequence", strategy = "sequence", 
  parameters = { 
    @Parameter(name="sequence", value="HONEY_SEQ") } 
  )
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="honeySequence")
private int Id;
Örnek - uuid2
Şöyle yaparız.
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "uuid2")
@Column(name = "id",nullable = false, updatable=false)
@Type(type="uuid-char")
private UUID id;
Örnek - oid
Şöyle yaparız.
@Id
@GenericGenerator(name = "oid", strategy = "com.foo.OurIDGenerator")
@GeneratedValue(generator = "oid")
protected Long id;
strategy Alanı
native değerini alabilir.
Örnek
Şöyle yaparız.
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator="gen")
@GenericGenerator(name = "gen", strategy = "native")
@Column(name = "id", nullable = false)
private Long id;

Hiç yorum yok:

Yorum Gönder