@Temporal ek açıklamasının Hazırda Bekletme modunda kullanımı nedir?


104

Hazırda Bekletme Belgelerinde @Temporalek açıklama için aşağıdaki bilgiler bulunur :

Düz Java API'lerinde, zamanın zamansal kesinliği tanımlanmamıştır. Zamansal verilerle uğraşırken, veritabanında beklenen kesinliği açıklamak isteyebilirsiniz. Temporal veriler DATE, TIME veya TIMESTAMP hassasiyetine sahip olabilir (yani gerçek tarih, yalnızca saat veya her ikisi). İnce ayar yapmak için @Temporal ek açıklamasını kullanın.

Ne anlama temporal precision of time is not definedgeliyor? Nedir temporalveri ve hassas? İnce ayar nasıl yapılır?


3
Varlık mülkünüz olarak Takvimi kullanırsanız, düz java'da, örneğin veritabanına kaydetmek istediğinizde gerekli olmayan birçok bilgiyi yazdırır. @ Temporal (TemporalType.TIMESTAMP) gibi bir şeye sahip olabilirsiniz. Takvim özelliğinizde @Temporal (TemporalType.DATE) veya @Temporal (TemporalType.TIME) olarak değiştirerek zaman damgasını veritabanınızda veya yalnızca tarih veya yalnızca zamanı depolamak için varlığınızdaki Takvim takvimi.
user3487063

Yanıtlar:


107

Bu açıklama kalıcı alanlar veya türün özellikleri için belirtilmelidir java.util.Dateve java.util.Calendar. Yalnızca bu türlerin alanları veya özellikleri için belirtilebilir.

TemporalAçıklama ile bağlantılı olarak kullanılabilir Basicaçıklama, Idek açıklama veya ElementCollectionaçıklama (eleman toplama değeri, zamansal tipte olduğunda.

Düz Java API'lerinde, zamanın zamansal kesinliği tanımlanmamıştır. Geçici verilerle uğraşırken, veritabanında beklenen kesinliği açıklamak isteyebilirsiniz. Geçici veriler DATE, TIME veya TIMESTAMP hassasiyetine sahip olabilir (yani, gerçek tarih, yalnızca saat veya her ikisi). @Temporalİnce ayar yapmak için ek açıklamayı kullanın .

Zamansal veriler, zamanla ilgili verilerdir. Örneğin, bir içerik yönetim sisteminde, bir makalenin oluşturulma tarihi ve son güncelleme tarihi geçici verilerdir. Bazı durumlarda, zamansal verilerin hassas olması gerekir ve kesin tarih / saati veya her ikisini de ( TIMESTAMP) veritabanı tablosunda saklamak istersiniz .

Geçici hassasiyet, çekirdek Java API'lerinde belirtilmemiştir. zaman damgası ve arasında gidip gelen @Temporalbir JPAek açıklamadır java.util.Date. Aynı zamanda time-stampzamana dönüşür . Örneğin, aşağıdaki ön bilgide @Temporal(TemporalType.DATE) zaman değerini düşürür ve yalnızca tarihi korur .

@Temporal(TemporalType.DATE)
private java.util.Date creationDate;

Javadocs'a göre,

Sorgu yöntemi parametrelerinde uygun bir {@code TemporalType} bildirmek için ek açıklama. Bu ek açıklamanın varsayılan olarak yalnızca {@link Date} türündeki parametrelerde kullanılabileceğini unutmayınTemporalType.DATE

[Çeşitli kaynaklardan toplanan yukarıdaki bilgiler]


Java türü Zaman Damgasıyla neden kullanamıyorum?
toz366

3
Yani sadece TemporalType.TIMESTAMP kullanıyorsanız ... bu notu kullanmanın bir anlamı var mı? Tarihler onsuz bu amaçla iyi çalışıyor gibi görünüyor ..
Amalgovinus

MySql yyyy-MM-dd
DB'de

@shantaram_t bu size yardımcı olabilir
Ankur Singhal

1
Bir girdim var: 02/10/2017ve bunu 2017-10-02veya2017/10/02
Shantaram Tupe

43

@Temporal aşağıdaki sütun öğelerinin veritabanı tablosunda saklamak için kullanılabilen bir JPA notudur:

  1. TARİH ( java.sql.Date)
  2. ZAMAN ( java.sql.Time)
  3. TIMESTAMP ( java.sql.Timestamp)

Genellikle Datesınıfta bir alan ilan edip saklamaya çalıştığımızda. Veritabanında TIMESTAMP
olarak saklanacaktır .

@Temporal
private Date joinedDate;

Yukarıdaki kod, değeri 08-07-17 04: 33: 35.870000000 PM gibi saklayacaktır.

Veritabanında sadece TARİH'i saklamak istiyorsak ,
/ tanımlayabiliriz TemporalType.

@Temporal(TemporalType.DATE)
private Date joinedDate;

Bu sefer 08-07-17 veritabanında saklanırdı

@TemporalGereksinime göre kullanılabilecek başka özellikler de vardır .


Varsayılan değer TemporalType.DATE şeklindedir. Zaman bölümüyle ek açıklamasız öznitelik değeri sağladığınız hakkında hiçbir fikriniz yok.
Simon Mantık

iki tarih aynıysa yukarıda irade çalışıyordur (TemporalType.DATE).
Lova Chittumuri

Yapma Kopyala Yapıştır cevabı. stackoverflow.com/questions/25333711/…
Lova Chittumuri

11

Geçici türler, kalıcı durum eşlemelerinde kullanılabilen zamana dayalı türler kümesidir.

Desteklenen zamansal türlerinin listesi üç içerir java.sqltürleri java.sql.Date, java.sql.Timeve java.sql.Timestamp, ve iki içerir java.utiltürleri java.util.Dateve java.util.Calendar.

java.sqlTipleri tamamen sorunsuz bulunmaktadır. Tıpkı diğer basit eşleme türleri gibi davranırlar ve özel bir değerlendirmeye ihtiyaç duymazlar.

java.utilBununla birlikte, bu iki tür java.sql, JDBC sürücüsü ile iletişim kurarken hangi JDBC türlerinin kullanılacağını belirtmek için ek meta verilere ihtiyaç duyar . Bu, onlara @Temporalaçıklama ekleyerek ve JDBC türünü TemporalTypenumaralandırılmış türün bir değeri olarak belirterek yapılır .

java.sqlTürlerin her birini temsil etmek için numaralandırılmış üç DATE, TIME ve TIMESTAMP değeri vardır.


5

bunu kullan

@Temporal(TemporalType.TIMESTAMP)
@Column(name="create_date")
private Calendar createDate;

public Calendar getCreateDate() {
    return createDate;
}

public void setCreateDate(Calendar createDate) {
    this.createDate = createDate;
}

4

Kısa cevap arıyorsanız:

Java.util.Date kullanılması durumunda, Java, SQL türleriyle doğrudan nasıl ilişki kuracağını gerçekten bilmiyor. İşte o zaman devreye @Temporalgiriyor. İstenen SQL türünü belirtmek için kullanılır.

Kaynak: Baeldung


3

Hibernate 5.2 kullanıyorum ve @Temporalartık gerekli değil.
java.util.date , sql.date , time.LocalDate , Date / timestamp olarak uygun veri türü ile DB'de saklanır.


Tarihi sadece Hibernate 5.x
Kms

Java 8 LocalDate Kullanımı
Josh

1

Veritabanı tablosuna tarih, saat veya her ikisini eklemek için @Temporal annotation kullanıyoruz. TemporalType kullanarak veri, zaman veya her iki int tablosunu da ekleyebiliriz.

@Temporal(TemporalType.DATE) // insert date
@Temporal(TemporalType.TIME) // insert time
@Temporal(TemporalType.TIMESTAMP) // insert  both time and date.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.