2011-06-27 49 views
1

我對Hibernate相當陌生。我想映射一些對象,讓我們說String到一個MySQL日期(這是一個沒有時間或時區的日期)。我認爲這將是相當直接的。但我似乎無法找到一個好的解決方案。JPA/Hibernate映射簡單字符串或任意對象到mysql日期類型?

在我的實際應用程序中,我沒有使用字符串。我想在JSR 310中使用LocalDate或我自己的簡單月份 - 日期 - 年份三元組類型。

我真的......真的不想寫一些內部setter或getter它轉換我的簡單對象轉換爲java.sql.Date或java.util.Date因爲:

  1. 它漲大了帶有不必要代碼的域對象。
  2. 我必須在我的所有域對象中編寫相同的代碼
  3. 它有點失敗了我使用這種類的全部目的。使用這些類的重點是避免任何可能的時區問題。當我只想保留一個簡單的日期(比如生日 - 2005年10月1日)時,引入一個具有時間和時區的類(java.sql.Date或java.util.Date)似乎很愚蠢。

我想底層的問題是JDBC驅動程序可能只能將核心java日期類映射到mysql日期類型?

回答

2

我可以建議你看一下現有的解決方案,看看如果你不能既:

  1. 使用它在自己的代碼
  2. 使用它作爲一個例子來激發你的代碼

http://joda-time.sourceforge.net/contrib/hibernate/index.html

我個人建議喬達時間你的時間/日期的需求,並且已經有一個Hibernate的橋樑吧。除非您使用Joda Time,否則請查看上面的URL以及休眠橋的代碼,以指導您如何編寫轉換器。

+0

謝謝。我檢查了該項目的源代碼。編寫我自己的代碼看起來相當簡單,但也許我現在只是堅持使用JODA。 – nogridbag

+0

作品完美,謝謝, – nogridbag

0

由於你有你的日期列的字符串,我猜除了添加輔助方法轉換沒有出路。但是,如果涉及時區,則最好以毫秒(長)傳遞日期,這很容易用於創建日期對象。時區可以根據需要應用。因此,使用與mysql日期類型映射的標準Date類。

+0

從時代開始就經歷了一個毫秒,與我想要做的完全相反。這代表了一個特定的實例。另外,我理想情況下不會使用String。我將使用JSR 310的LocalDate或JODA時間等效表示沒有時間或時區的日期。 – nogridbag

+0

我會舉例說明爲什麼我不想傳遞日期。我得到一個Calendar,calendar.setTimeZone(「Asia/Shanghai」),calendar.clear(),calendar.set(2011,Calendar.JULY,23),myDomainObj.setDate(新的java.sql.Date(日曆。 getTimeInMillis()))。它看起來很無辜。我正在日曆中創建適當的日期。當我把它包裝在java.sql.Date中時,它現在代表7月22日。當然這是一個錯誤,但爲什麼我甚至想要這樣的錯誤的「機會」。我的簡單日期應該與時區無關。 – nogridbag

+0

它在與GMT相對應的默認時區中創建Date對象。所以當你收回時,你應用適當的時區。這是一段代碼片段。 Calendar calendar = Calendar.getInstance(); \t \t calendar.setTimeZone(TimeZone。getTimeZone獲取(( 「亞洲/上海」))); \t \t \t \t calendar.clear(); \t \t calendar.set(2011,Calendar.JULY,23); \t \t java.sql.Date dt = new java.sql.Date(calendar.getTimeInMillis()); \t \t \t \t System.out.println(dt); \t \t日曆cal1 = Calendar.getInstance(TimeZone.getTimeZone((「Asia/Shanghai」))); \t \t cal1.setTime(dt); System.out.println(「Calendar」+ cal1.get(Calendar.DATE)); – isobar

相關問題