2011-05-21 91 views
13

我最近得到了最新版本的Hibernate,並注意到我的UserTypes現在有關於AbstractStandardBasicType的nullSafeGet(ResultSet,String)和nullSafeSet(PreparedStatement,T,int)方法的警告,它們支持使用SessionImplementor參數的相應方法deprecated。問題是,當你實現一個UserType時,SessionImplementor不會像BasicType,CompositeUserType等那樣傳遞給你。棄用後實現Hibernate UserType的最佳方式是什麼?

我檢查了Hibernate手冊,看看是否有更新的例子。他們的UserType示例使用get/set而不是nullSafeGet/nullSafeSet,但這些方法也被棄用,以支持採用SessionImplementor的版本。所以,好像連Hibernate的官方用戶類型的例子是使用過時的方法,這使我想知道兩件事情:

  1. 有沒有好的辦法從用戶等級和積分中拿到SessionImplementor?
  2. 如果從UserType中獲取SessionImplementor並且不想寫我自己的nullSafeGet/nullSafeSet,我是否應該放棄UserType以支持其替代選項之一? UserType和BasicType之間的實際區別是什麼?
+3

在hibernate-dev郵件列表中有關於此主題的對話:[here](http://lists.jboss.org/pipermail/hibernate-dev/2011-February/006030.html) – 2011-08-23 17:04:58

+1

有沒有解決這個問題在4.1.0.Final?它似乎不是如此... – MetaChrome 2012-04-09 23:25:08

+0

我希望我能告訴你。我遷移到JPA,並堅持使用標準的JPA註釋,但不幸的是,它不支持任何類似UserTypes的註釋。 – spaaarky21 2013-01-04 00:30:29

回答

5

感謝Ryan Ransford對我原來的問題的評論。雖然這不是問題的解決方案,但他從Hibernate開發人員郵件列表中提供的link解釋了爲什麼沒有解決方案可用。

在3.6.x中不提供一個不推薦的替代方案,因爲做 這樣會破壞UserType的實現。

考慮到這些僅僅是棄用警告,在下一個非維護版本可用時將花費太多時間用於解決方法是沒有意義的。不幸的是,下一個大版本是4.0,而不是3.7,所以遷移可能會涉及更多一點。

+1

好吧..?因此,如果我從v3.something遷移到v4.something,我該如何處理現在不推薦使用的UserType的nullSafeGet/nullSafeSet方法? – KyleM 2013-06-10 12:46:33

+0

@KyleM我最終遷移到嚴格的JPA方法,並且無法確定。在Hibernate 4.2 JavaDocs中,我發現已經刪除了不推薦使用的方法,但仍然有一個採用SessionImplementor的nullSafeGet()/ Set()方法。我假設你的UserType會實現這些方法,但我不能評論正確的方法,因爲我從來沒有做過。 – spaaarky21 2013-06-10 19:10:31

相關問題