6 Ağustos 2019 Salı

JPA @Temporal Anotasyonu - Kullanmayın

Giriş
Şu satırı dahil ederiz.
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
- Bu anotasyon eski java.util.Date veya java.util.Calendar sınıfları için var. Eğer bu sınıflar yerine Java 8 ile gelen yeni sınıfları ve JPA 2.2 kullanırsak bence her şey çok daha kolay.

- Yani bu anotasyon LocalDate ve LocalDateTime ile çalışmıyor.

- Bu anotasyon ile java.util.Date ve java.util.Calendar tiplerinin veritabanında hangi çözünürlükte saklanacağı belirtilir. Çünkü java.sql.Date, java.sql.Time,java.sql.Date.Timestamp sınıflarının veritabanında nasıl saklanacağı belli. Ancak java.util.Date ve java.util.Calendar sınıflarının nasıl saklanacağı belli değil.

- Eğer bu anotasyonu kullanmazsak örneğin Hibernate java.util.Date nesnesini timestamp olarak saklamaya karar verebilir. Açıklaması şöyle.
Note, however, that Hibernate works without @Temporal by defaulting to a temporal type of TIMESTAMP.
- Ayrıca eğer alanı bu tipleri anotasyon ile işaretlemezsek kaydederken sütun null olarak kaydedilebilir. Alana değer atamak istersek @org.hibernate.annotations.CreationTimestamp veya @org.hibernate.annotations.UpdateTimestamp kullanılabilir.

DATE Alanı
Çözünürlük olarak 08-07-17 gibi bir değer elde ederiz.
Örnek 
Şöyle yaparız.
@Temporal(TemporalType.DATE)
public Date startDate;
Örnek
Şöyle yaparız.
@Entity
public class Patient {
  ...
  @Temporal(TemporalType.DATE)
  @Column(name="dob", nullable=false)
  private Date dob;
  ...  
}
TIMESTAMP Alanı
Çözünürlük olarak 08-07-17 04:33:35.870000000 PM gibi bir değer elde ederiz.
Örnek
Şöyle yaparız.
@Temporal(TemporalType.TIMESTAMP)
public Date startDate;

Hiç yorum yok:

Yorum Gönder