2011-11-01 16 views
26

Tất cả các bảng db của tôi phải có trường endTime theo mặc định sẽ là END_OF_TIME hoặc một cái gì đó tương tự. Tôi không hài lòng về giới hạn 2038 vì vậy tôi muốn endTime được loại DATETIME trong mysql.Làm thế nào tôi có thể ánh xạ một ngày Java đến DATETIME trong mysql (theo mặc định là TIMESTAMP) với chú thích Hibernate

đang

My Java là:

@MappedSuperclass 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 
public class BaseDBEntity { 
@Id 
@Column(length=36) 
public String id; 

@Temporal(TemporalType.TIMESTAMP) 
public Date startTime; 

@Temporal(TemporalType.TIMESTAMP) 
public Date endTime; 

public BaseDBEntity() { 
} 

} 

tôi có thể làm việc xung quanh bằng cách tạo bảng bằng tay với một lĩnh vực EndTime kiểu DATETIME, và hơn bản đồ thực thể EndTime để cột đó, tuy nhiên tôi muốn Hibernate để tạo các bảng tự động - làm thế nào tôi có thể làm điều đó?

Trả lời

56

Sử dụng columnDefinition thuộc tính của @Column annotation:

@Column(name = "startTime", columnDefinition="DATETIME") 
@Temporal(TemporalType.TIMESTAMP) 
private Date startTime; 

Và làm ơn, làm cho thuộc tính của bạn tin.

+2

đó làm việc! Tại sao vẫn cần sử dụng chú thích @Temporal? Có vẻ như không có hiệu ứng bổ sung. – user1023622

+8

Vâng. Chú thích @Temporal cho Hibernate biết nếu nó nên sử dụng một java.sql.Date hoặc một java.sql.Timestamp để lưu trữ ngày đọc từ cơ sở dữ liệu. Cả hai mở rộng lớp java.util.Date, nhưng java.sql.Date không giữ bất kỳ thông tin thời gian nào: chỉ là ngày tháng. –

+7

+1 cho "vui lòng, đặt thuộc tính của bạn là riêng tư" – scravy

-3
public enum TemporalType { 
    /** 
    * Map as <code>java.sql.Date</code> 
    */ 
    DATE, 

    /** 
    * Map as <code>java.sql.Time</code> 
    */ 
    TIME, 

    /** 
    * Map as <code>java.sql.Timestamp</code> 
    */ 
    TIMESTAMP 
} 

tôi thấy rằng các TemporalType.TIMESTAMPjava.sql.Timestamp

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