@GeneratedValue Annotation’ı @Id ile birlikte kullanılır ve değişkenin otomatik değer almasını sağlar. Aşağıdaki örnekte id değişkeni oluşturulmuş Student nesnesinin veritabanına kaydedilmesi sırasında otomatik bir değer alır.
@Entity public class Student{ @Id @GeneratedValue private Long id; public Long getId() { return id; } public void setId(Long id) { this.id = id; } }
Yukarıdaki sınıf için oluşturulan nesnenin kaydedilme kodu. @Id Annotation’ı kullanıldığında ilgili entity sınıfının değişkeni null olmamalıdır. Fakat @GeneratedValue kullandığımızda değer otomatik olarak atanacak ve null olmayacağından dolayı bu değişken null olarak bırakılabilir.
Student student = new Student(); session.save(student);
Otomatik değer oluşturulurken nasıl bir algoritmanın kullanılacağı bu değişken ile belirlenir. Herhangi bir değer belirlenmez ise varsayılan seçenek GenerationType.AUTO‘dur .Aşağıdaki seçenekleri mevcuttur.
Hibernate tarafından otomatik olarak bir strategy seçilmesini sağlar.
@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;
Varsayılan değer olduğundan dolayı aşağıdaki gibi bir değer atanmadan da kullanılabilir.
@Id @GeneratedValue private Long id;
Veritabanı içerisinde bir tablo oluşturarak sıradaki değerin hesaplanmasını sağlar bu diğer yöntemlere göre daha yavaştır ve kullanımı seyrektir.
@Id @GeneratedValue(strategy = GenerationType.TABLE) private Long id;
Yukarıdaki kod için oluşturulan hibenate_squences tablosu(postgresql için)
sequence_name | next_val | |
---|---|---|
default | 1 | </figure> |
Veritabanı sequence’lerini kullanarak otomatik değeri sağlar. Bu seçenek kullanıldığında veritabanı içerisinde bir sequence oluşturulur.
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long id;
Yukarıdaki kod için oluşturulan hibernate_sequence (postgresql için)
last_value | log_cnt | is_called | |
---|---|---|---|
1 | 32 | true | </figure> |
Veritabanı içindeki Auto Increment özelliği kullanılarak sıraki değerin üretilmesini veritabanına bırakır.
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;