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