2009-01-27 95 views
1

問題如何使用Hibernate

動態添加和刪除字段上使用Hibernate飛實體時動態添加字段。

我敢肯定,這是一種常見的情況,大多數企業應用程序將需要一定程度的自定義。那麼最好的辦法是什麼?理想情況下,它不應該需要重新編譯並平滑地創建/刪除架構中的字段,並允許應用程序繼續工作。

如果它只是一個更新xml的問題,(我很確定代理類是必需的),那麼架構如何重新加載?

感謝輸入

注百萬:如果你想有更好的解決辦法,我也可爲M所有的耳朵感謝

回答

1

我不認爲這是一個非常常見的用例,因爲亞倫表示它會花費你很長一段時間來指出這一點。

模式更新也不是簡單的。即使認爲Hibernate確實提供了程序化模式更改,但它僅限於簡單的事情,如添加/刪除字段。這可能適合你,但是如果數據類型或列的可空性發生變化,Hibernate將不會爲你更新它。

假設您可以接受另一個連接的開銷,您可能需要考慮OneToMany關係並將數據作爲一行存儲在單獨的表中。

0

我這樣做一次(在我的記憶中挖掘)。好的。這樣做:

  • 下載的Hibernate源
  • 查找它加載XML配置

你會看到,它創建包含表定義一個類的類。請注意涉及的字段名稱和類型。如果該字段是私密的,那麼Field.setAccessible(true)是你的朋友。

你需要做的是查詢表的列表的全局配置類,找到你的表,然後修改字段列表。問題始於將這些字段映射到某個類,因爲在運行時不能更改Java類。

由於這非常複雜,因此這裏有一個更簡單的方法:創建一個包含所有字段的Hibernate映射,然後使用自定義查詢來僅加載一個子集。您可以使用HQL在運行時輕鬆創建這樣的查詢。只指定你需要的列,而Hibernate不會嘗試加載其餘的。