2010-05-26 20 views
5

Với một bảng tạo bằng SQL nàyJava: lớp JPA, refactoring từ ngày đến DateTime

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

và một lớp thực thể được định nghĩa như vậy

@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 
    ... 
} 

Với sự trên, tôi có thể sử dụng JPA để đạt được ánh xạ đối tượng. Tuy nhiên, thuộc tính xDate chỉ có thể lưu trữ ngày, ví dụ: dd/MM/yyyy.

Làm cách nào để tôi cấu trúc lại ở trên để lưu trữ đối tượng ngày đầy đủ chỉ sử dụng một trường, tức là dd/MM/yyyy HH24:mm?

Trả lời

4

Bạn đã thử thay đổi giá trị @Temporal thành TemporalType.DATETIME chưa? java.util.Date và java.sql.Date cả hai thành phần ngày và thời gian lưu trữ, các điều khiển TemporalType mà phần JPA lưu trữ/chú ý đến; ngày, giờ hoặc cả hai.

+0

@sblundy: Cảm ơn câu trả lời, đó cũng là cảm giác của tôi, tuy nhiên, tôi có cần phải thay đổi biến thành viên trong lớp thực thể của tôi hoặc định nghĩa lược đồ cho bảng không? – bguiz

+0

@bguiz: Trường không, cột có. Nó phụ thuộc vào DB bạn đang sử dụng, nhưng DATETIME sẽ hoạt động – sblundy

+0

@sblundy: Tôi đang sử dụng Toplink/JavaDB – bguiz

7

Nếu bạn cũng muốn để lưu trữ thông tin thời gian ở cấp cơ sở dữ liệu, sử dụng TemporalType.DATETIME:

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

Sử dụng một loại TIMESTAMP cột ở cấp cơ sở dữ liệu (và xDate sẽ được lưu trữ như 'yyyy-MM-dd HH:mm:ss.S').

+0

+1 @Pascal Thivent: Cảm ơn bạn đã trả lời, cả hai bạn đều đúng, nhưng tôi đang cấp séc cho sblundy kể từ lần đầu tiên. – bguiz

+0

@ bguiz Chắc chắn, không sao cả! –

+3

Xin chào. Tôi đang sử dụng JPA với 'EclipseLink' và' TemporalType' chỉ có tùy chọn 'DATE',' TIME' và 'TIMESTAMP', chứ không phải' DATETIME'. Tôi có nên sử dụng 'TIMESTAMP' hoặc' TIME' không. –

Các vấn đề liên quan