2010-05-26 28 views
5
bir tablo ile

için üstlenmeden ben JPA kullanabilirsiniz bu SQLJava: JPA sınıfları, Tarih Tarih saat

Create Table X (
    ID varchar(4) Not Null, 
    XDATE date 
); 

ve üzeri ile öylesine

@Entity 
@Table(name = "X") 
public class X implements Serializable { 
    @Id 
    @Basic(optional = false) 
    @Column(name = "ID", nullable = false, length = 4) 
    private String id; 
    @Column(name = "XDATE") 
    @Temporal(TemporalType.DATE) 
    private Date xDate; //java.util.Date 
    ... 
} 

gibi tanımlanmış bir varlık sınıfını kullanılarak oluşturulan nesne ilişkisel eşleştirmeyi gerçekleştirir. Bununla birlikte, xDate özniteliği yalnızca tarihleri ​​saklayabilir, ör. dd/MM/yyyy.

Tam bir tarih nesnesini, yalnızca bir alan, yani dd/MM/yyyy HH24:mm kullanarak depolamak için yukarıdaki adımları nasıl yeniden düzenlerim?

cevap

4

@Temporal değerini TemporalType.DATETIME olarak değiştirmeyi denediniz mi? java.util.Date ve java.sql.Date, hem tarih ve zaman bileşenlerini depolar, hem de JPA'nın parçası olan TemporalType kontrolleri dikkat çeker; tarih, saat veya her ikisi de. Ayrıca veritabanı düzeyinde zaman bilgilerini saklamak istiyorsanız

+0

@sblundy: Cevabınız için teşekkürler, benim de bağırsak hislerimdi, ancak, varlık sınıfımdaki üye değişkenini veya tablo için şema tanımını değiştirmem gerekiyor mu? – bguiz

+0

@bguiz: Alan no, sütun evet. Kullanmakta olduğunuz DB'ye bağlıdır, ancak DATETIME çalışmalıdır – sblundy

+0

@sblundy: Toplink/JavaDB kullanıyorum – bguiz

7

, TemporalType.DATETIME kullanın:

@Column(name = "XDATE") 
@Temporal(TemporalType.DATETIME) 
private Date xDate; //java.util.Date 

veritabanı düzeyinde bir TIMESTAMP sütun türünü kullanın (ve xDate'yyyy-MM-dd HH:mm:ss.S' olarak saklanacaktır).

+0

+1 @Pascal Thivent: Cevabınız için teşekkürler, her ikiniz de haklısınız, ama ilk girişinden beri sblundy'ye veriyorum. – bguiz

+0

@ bguiz Elbette, sorun değil! –

+3

Merhaba. 'EclipseLink' ile JPA kullanıyorum ve 'TemporalType' sadece 'DATE', 'TIME' ve 'TIMESTAMP' seçeneklerine ve' DATETIME 'seçeneğine sahip değilim. "TIMESTAMP" veya "TIME" kullanmalı mıyım? –