2009-06-07 48 views
5

Tôi nhận được thông báo "chữ không khớp với chuỗi định dạng".Ánh xạ một Ngày tháng Oracle cho một đối tượng Java bằng cách sử dụng Hibernate

Ví dụ, sau đây là một số phương pháp từ một lớp Java:

public String getDateTime(); 
public void setDateTime(String date_time); 

Dưới đây là các bản đồ từ Hibernate tập tin cấu hình cho lớp đó:

<property name="dateTime" column="date_time"> 

và đây là DDL cho rằng cột:

CREATE TABLE "SCHEMA"."TABLE_NAME" 
    ( 
    "DATE_TIME" DATE, 
    etc. 
    ) 

Tôi đã thử đặt loại = "ngày" và "dấu thời gian" (không phải cùng một lúc) làm attr trên thuộc tính trong cấu hình hibernate, và sau đó thay đổi kiểu Java từ String thành Date, nhưng điều đó đã cho tôi một lỗi khác. Tôi đọc một cái gì đó về ràng buộc các tham số nhưng không thể làm cho người đứng đầu hoặc đuôi của điều đó.

Khi tôi nhận xét rằng thuộc tính từ cấu hình mọi thứ khác đang hoạt động, vì vậy tôi chắc chắn đó là vấn đề của tôi. Điều gây phiền nhiễu là tôi có một ánh xạ bảng/lớp khác có vẻ giống như ánh xạ chuỗi Java Date-> Java mà không cho tôi vấn đề này.

Trả lời

8

Bạn nên sử dụng lớp ngày Java.util làm thuộc tính để phản ánh cột ngày tháng.

Class blah{ 
private Date dateTime; 

public Date getDateTime(); 
public void setDateTime(Date dateTime); 

blah(){} 

} 

Lỗi khi bạn sử dụng ngày làm thuộc tính lớp Java là gì?

+0

Guh. Tôi không nghĩ rằng tôi đã thay đổi kiểu tham số phương thức setter từ String thành Date lần đầu tiên. Cảm thấy câm, bởi vì nó hoạt động như đồng hồ lần này. –

+2

Điều này chỉ hoạt động nếu bạn KHÔNG bao gồm thuộc tính "loại" trong thuộc tính ánh xạ: Nếu bạn bao gồm loại có giá trị "ngày" hoặc "dấu thời gian "nó sẽ không chính xác chuyển đổi các giá trị. Vì vậy, sau đây là BAD: Đây là một liên kết giải thích lý do tại sao điều này là đúng: http://fishbowl.pastiche.org/2005/07/13/hibernate_oracle_and_dates_a_story/và đây là một liên kết giải thích các giải pháp: http://www.enavigo.com/2007/10/20/mapping-hibernate-to-oracle-date-fields/ –

2

Loại thuộc tính dateTime của bạn phải là Dấu thời gian hoặc Ngày, sẽ tự động chuyển đổi ngày/giờ của Oracle thành nó. Tôi không thấy điểm giữ ngày tháng là Chuỗi vì bạn phải liên quan đến định dạng.

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