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
を追跡します。
代わりに、単純なList
であることの、それは実際にキーが(スーパークラスから)Long id
あるMap
だように、私たちは、children
List
への変更をしたいと思います。
@???
private Map<Long, Shape> children;
はどのようにHibernateで取り扱わこの種の移行/種類の変化がありますか?私は、Hibernateのこの側面に慣れていないよ - (古いデータを使用して、アプリケーションの最初の負荷に)List<Shape>
を受け入れ、新しいMap
の手動生成を実行するためにオーバーロードすることができますいくつかの方法がありますか?
のは、私はしばらくの間、元のデータモデルを使用してきたとしましょう、と私は10人の子供を持つ形状を有しています。データモデルを変更してアプリケーションを再起動すると、マップにはどのようなものが含まれますか?鍵は何になるでしょうか? –
マップを使用する場合、@MapKeyを使用して、マップのキーとしてターゲットエンティティ(Shape)の属性の1つを使用する必要があります。デフォルトでは、キーはターゲットエンティティのIDです。したがって、マップには、IDのインデックスが付けられたリストのすべての要素が含まれます。スキーマ変更が必要な場合は、優先SQLツールを使用してデータを移行し、新しいマッピングでアプリケーションを起動します。しかし、この場合、それは必要ではありません。 –
ありがとうございます - Hibernateには、組み込みのマッピングツール/機能がありますか?アプリケーションの中で実行できることは何ですか?私たちのアプリはHibernateをデータストアとして使用し、複数のクライアントサイトで使用されています。各場所にアクセスして手動でSQLを移行する必要があるのは面倒です。 (より複雑な移行の場合は) –