2011-12-12 33 views
26

gì nếu chúng tôi sử dụngvắng mặt của chú thích @Temporal trong ngủ đông

@Column(name="birth_date", nullable=false, length=19) 
public Date getBirthDate() { 
    return this.birthDate; 
} 

thay vì

@Temporal(TemporalType.TIMESTAMP) 
@Column(name="birth_date", nullable=false, length=19) 
public Date getBirthDate() { 
    return this.birthDate; 
} 

Có bất kỳ tác dụng phụ nếu chúng ta sử dụng tài sản cột ngày mà không @Temporal chú thích?

+0

Tôi sẽ thêm vào câu hỏi này so sánh với f: convertDateTime ... Kính trọng. –

Trả lời

29

Chỉ mảnh tài liệu tôi quản lý để tìm thấy:

Trong đồng bằng API Java, chính xác thời gian của thời gian không được định nghĩa. Khi xử lý dữ liệu thời gian, bạn có thể muốn mô tả độ chính xác mong đợi trong cơ sở dữ liệu. Dữ liệu tạm thời có thể có độ chính xác DATE, TIME hoặc TIMESTAMP (tức là ngày thực tế, chỉ có thời gian hoặc cả hai). Sử dụng chú thích @Temporal để tinh chỉnh điều đó.

Từ 2.2.2.1. Declaring basic property mappings.

có thể cho biết rằng ngày tháng thực tế đại diện trong cơ sở dữ liệu không được xác định và để đảm bảo tốt hơn là chỉ định trực tiếp.

+3

+1 - Tôi cũng không tìm thấy bất kỳ mảnh nào nhiều hơn mà sẽ nói về những gì Hibernate sẽ làm gì nếu không có '@ Temporal' được chỉ định. Cũng giống như một bổ sung - EclipseLink thậm chí không cho phép bạn ** không ** xác định độ chính xác thời gian. Tôi muốn xác định độ chính xác chính xác mà bạn mong muốn có. –

22

Tôi nhận ra câu hỏi này đã được trả lời nhưng chúng tôi đã đấu tranh với điều này ngày hôm nay vì vậy tôi muốn cung cấp cho một số cái nhìn sâu sắc hơn cho những người trong tương lai vấp ngã này.

Sử dụng Oracle 11g với trình điều khiển phiên bản 11 nếu bạn không sử dụng chú thích thời gian thì mỗi ngày, giờ và kiểu dữ liệu dấu thời gian từ Oracle sẽ ánh xạ tới dấu thời gian trong mã của bạn khi chạy. Chức năng này là tốt, tuy nhiên điều này gây ra cho chúng tôi vấn đề hiệu suất nghiêm trọng. Điều này là do chúng tôi đã có loại NGÀY như một phần của khóa chính ghép. Cột này là cột hàng đầu của chỉ mục cũng như cột mà chúng tôi đã sử dụng để phân vùng. Khi trình điều khiển sẽ cố gắng lưu giữ các bản ghi với cột này trong mệnh đề where, Oracle sẽ thực hiện chuyển đổi kiểu dữ liệu trong DB từ DATE thành TIMESTAMP. Điều này làm cho chỉ số vô dụng và hiệu suất là khủng khiếp.

Câu chuyện dài hơn, thêm chú thích này luôn luôn vì sợ rằng bạn sẽ sẵn sàng trả giá.

+0

+1 cho câu trả lời :) –

+0

Giải thích tốt với ví dụ thời gian thực. TY! – Diablo

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