2
我使用Hibernate來存儲一個數據模型,其中有一些簡單的領域:更改Hibernate實體中的字段類型?
@Entity
public class Shape extends DomainObject {
@LazyCollection(LazyCollectionOption.FALSE)
@CollectionOfElements()
private List<Shape> children;
@Column
private int numSides;
... etc. ...
}
的DomainObject
超跟蹤的Long id
的。
我們想做出改變的children
List
,這樣的而不是一個簡單的List
,它實際上是一個Map
其中關鍵是Long id
(從超)。
@???
private Map<Long, Shape> children;
在Hibernate中如何處理這種性質的遷移/類型變化?我對Hibernate的這個方面不太熟悉 - 是否有一些方法可以超載來接受List<Shape>
(在應用程序的第一次加載時,使用舊數據)並執行手動生成新的Map
?
比方說,我一直在使用原始數據模型,並且我有一個包含10個子項的Shape。當我對數據模型進行更改並重新啓動應用程序時,Map將包含什麼?關鍵是什麼? – 2012-02-07 19:16:07
使用Map時,必須使用@MapKey將目標實體(Shape)的某個屬性用作地圖的鍵。默認情況下,密鑰是目標實體的ID。因此,地圖將包含列表中的所有元素,並按其ID進行索引。如果您需要更改架構,請使用您首選的SQL工具遷移數據,然後使用新映射啓動您的應用程序。但在這種情況下,它不應該是必要的。 – 2012-02-07 19:19:14
謝謝 - Hibernate是否有可用的內置映射工具/功能?一些可以在我們的應用程序內執行的東西?我們的應用程序使用Hibernate作爲數據存儲,並在多個客戶端網站上使用。必須訪問每個位置並執行手動SQL遷移將非常繁瑣。 (對於更復雜的遷移,就是這樣)。 – 2012-02-07 19:23:08