12 Mart 2020 Perşembe

JPA @Column Anotasyonu

Giriş
Şu satırı dahil ederiz.
import javax.persistence.Column;
Column herhangi bir alanın veya getter metodun veritabanındaki hangi sütuna yazılacağını belirtir. JPA'nın temel ögelerinden biridir. Dolayısıyla kullanımını iyi anlamak gerekir.

Normalde bu anotasyon alanlara yazılmasa da olur. Açıklaması şöyle
It is not "necessary", unless you want to override default column naming, or default datastore column type etc. And just putting @Column does nothing as such anyway
columnDefinition Alanı
Veritabanı Java kodundan yaratılacaksa kullanılacak sütun tipini belirtir.
Örnek
Elimizde şöyle bir kod olsun
@Entity
public class Something implements Serializable {

   @Id
   int id;

   @Column
   String name;

   @Column(columnDefinition = "DEFAULT CURRENT_TIMESTAMP")
   Instant datex;

   //construct, setters, getters
}
Çıktı olarak şunu alırız
CREATE TABLE something(
   id INTEGER NOT NULL,
   name VARCHAR(50) NOT NULL,
   datex DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY (id)
) ENGINE=InnoDB
Örnek
Şöyle yaparız.
@Column(name = "optlock", columnDefinition = "integer DEFAULT 0",nullable = false)
private long version = 0L;
Örnek
Şöyle yaparız.
@Lob
@Column(columnDefinition="bytea")
private byte[] data;
insertable Alanı
Şöyle yaparız.
@Temporal(TemporalType.TIMESTAMP)
@Column(name="CREATED_ON", insertable= true, updatable=false)
private Date createdOn;
length Alanı
String için kullanılır. Şöyle yaparız.
@Column(nullable = false, length = 90)
private String descr;
name Alanı
Sanırım isimleri hep büyük harfle vermek gerekiyor.

Şöyle yaparız.
@Column(name = "user_name", nullable=false )
private String userName;
nullable Alanı
Veritabanı Java kodundan yaratılacaksa sütunu NOT NULL yapar
Örnek
Şöyle yaparız.
@Column(unique = true, nullable = false)
private Integer id;
Çıktı olarak şunu alırızz
CREATE TABLE `employees` (
  `emp_no` int NOT NULL,
  `birth_date` date NOT NULL,
  `first_name` varchar(14) NOT NULL,
  PRIMARY KEY (`emp_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
unique
Şöyle yaparız. nullable ile beraber kullanmak mantıklı. Bu alan eğer tek satır unique yapılacaksa işe yarıyor. Birden fazla alan unique yapılacaksa @Index anotasyonunu kullanmak gerekir.
@Column(unique = true, nullable = false)
private Integer id;


Hiç yorum yok:

Yorum Gönder