![](/img/trans.png)
[英]problem in connecting to oracle 10g express edition through java
[英]Is there a Problem with JPA Entities, Oracle 10g and Calendar Type properties?
將 JPA 實體與 Oracle 10g 結合使用時,我遇到了以下非常煩人的行為。
假設您有以下實體。
@Entity
@Table(name = "T_Order")
public class TOrder implements Serializable {
private static final long serialVersionUID = 2235742302377173533L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "activationDate")
private Calendar activationDate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Calendar getActivationDate() {
return activationDate;
}
public void setActivationDate(Calendar activationDate) {
this.activationDate = activationDate;
}
}
該實體映射到 Oracle 10g,因此在 DB 中將有一個表T_ORDER
,其主鍵為NUMBER
列ID
和一個TIMESTAMP
列activationDate
。
假設我創建了一個此類的實例,激活日期為15. Sep 2008 00:00AM
。 我當地的時區是 CEST 是GMT+02:00
。 當我持久化這個對象並使用 sqlplus 從表T_ORDER
選擇數據時,我發現表中實際上存儲了14. Sep 2008 22:00
,到目前為止還可以,因為 oracle db 時區是 GMT。
但現在是煩人的部分。 當我將這個實體讀回我的 JAVA 程序時,我發現 oracle 時區被忽略,我得到14. Sep 2008 22:00 CEST
,這絕對是錯誤的。
所以基本上,當寫入數據庫時,將使用時區信息,讀取時將被忽略。
有什么解決辦法嗎? 我猜最簡單的解決方案是將 oracle dbs 時區設置為GMT+02
,但不幸的是我不能這樣做,因為還有其他應用程序使用同一台服務器。
我們使用以下技術
MyEclipse 6.5 JPA 與 Hibernate 3.2 Oracle 10g 瘦 JDBC 驅動程序
出於這個確切原因,您不應該使用日歷來訪問數據庫中的日期。 你應該像這樣使用java.util.Date
:
@Temporal(TemporalType.TIMESTAMP)
@Column(name="activationDate")
public Date getActivationDate() {
return this.activationDate;
}
java.util.Date
指向某個時刻,與任何時區無關。 日歷可用於格式化特定時區或語言環境的日期。
我已經遇到了 JPA 和時間戳方面的問題。 我一直在oracle 論壇上閱讀,請檢查以下內容:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.