2009-08-05 81 views
1

如果已經有一個問題解決這個問題,那麼我可以請一個鏈接,因爲我找不到一個。如何從休眠中檢索類名?

我正在尋找獲取存儲在我的Hibernate數據庫中的對象的存儲類名稱。當我從外部查看數據庫時,我看到存儲的具有類名的字符串。如何在不構建對象的情況下檢索類名?

預先感謝您。

編輯:不,我沒有具體說明鑑別器;這些實際上是存儲的子類。我只是試圖獲得對象的實際子類。

+0

據我所知,Hibernate不會將他的類名存儲在數據庫中,對嗎?它從xml配置文件或註釋類獲取映射。 – Dave 2009-08-05 14:19:30

+0

它有點。我打開了pgAdmin,我可以在其中一個數據庫列中看到類名的相似之處。這不是確切的類名,但它足以達到我的目的。 – AlbertoPL 2009-08-05 14:38:17

+0

我能想到的,你會在數據庫中看到類名的唯一方法是如果你使用的是一個子類,而不是明確定義鑑別器的值。在這種情況下,Hibernate將使用類名作爲鑑別器。我建議你詳細說明你正在努力完成什麼。 – 2009-08-05 21:33:28

回答

1

有幾種方法,取決於您的實例如何映射到數據庫格式。在這兩種情況下,第一步是獲取包含映射配置的Hibernate實例(請參閱the API docs)。

根對象是Configuration,您尋找的信息可能由getTableMappings()返回。你將不得不使用調試器和Hibernate源代碼,並花些時間來弄清楚一切是如何工作的。

如果你使用的是Spring,你必須想出一個方法來獲取Configuration對象。你最好的選擇是在Configuration.buildSessionFactory()中設置一個斷點。這應該給你一個想法。

+0

我一定會研究這個,謝謝。 – AlbertoPL 2009-08-05 16:42:08

+1

http://stackoverflow.com/questions/516906 - 該答案顯示如何遍歷所有映射。 PersistentClass.getTable將爲你提供表名,所以如果你從表開始,你應該能夠遍歷所有的類映射,直到找到你想要的。子類可能會混淆這個問題,因爲一個表可以映射到多個類。 – 2009-08-05 21:38:32

+0

@Brian:你應該發佈這個答案:) – 2009-08-06 07:48:03

0

我在存儲類型的對象中創建了一個新字段。這是我用於我的解決方案,但我仍然喜歡如何訪問鑑別器值的答案。