4

次のような権限を持つモデル クラスUserがあります。List<String>

@LazyCollection(LazyCollectionOption.FALSE)
@CollectionOfElements
@Column()
private List<String> permissions = Collections.emptyList();

次のようなエントリを持つ SQL テーブルが作成されました。

H4 アップグレード前のユーザー権限

最近、Hibernate 4 にアップグレードしました。@CollectionOfElementsアノテーションが非推奨から完全に削除されたため@ElementCollection、次のように に移行するのに適した時期であると判断しました。

@LazyCollection(LazyCollectionOption.FALSE)
@ElementCollection // << CHANGED
@Column()
private List<String> permissions = Collections.emptyList();

ただし、起動すると、管理者アカウントでログインできませんでした。興味深いことに、H2 の JAR を使用してデータベースを調べたところ、テーブルが変更されていることがわかりました。

後のユーザー権限

私の質問:

  1. @CollectionOfElements古いものから新しいものへの DDL/スキーマの変更の包括的なリストはあります@ElementCollectionか?
  2. 下位互換性を確保するために推奨される方法、またはこれらのプロパティに提供できる追加の注釈はありますか? (特定の名前マッピング スキームまたは列名を指定できますか?)
  3. 最後に、すべてのCollectionタイプがこの変更Setsの影響を受けると想定Mapsしています。
4

1 に答える 1

7

最初の質問:

私は何も知りません。ただし、JPA 仕様は自由に入手でき、デフォルトのテーブル名と列名が何であるかを説明しています。

2 番目の質問:

@ElementCollection
@CollectionTable(name = "USER_PERMISSIONS"
                 joinColumns = @JoinColumn(name = "USER_ID"))
@Column(name = "ELEMENT")
private List<String> permissions = Collections.emptyList();

私は常にテーブルと列の名前を個人的に指定します。この種の驚きを回避し、いつでも好きな名前を選択できるようにし、セルフドキュメンタリーです。また、データベース スキーマと DDL を自分で作成することも好みます。これにより、必要なすべてのインデックス、制約、コメントなどが正しく作成されます。

3 番目の質問: はい、コレクションの性質は問題ではありません。この種の問題を回避するには、2 番目の質問への回答を参照してください。

于 2012-06-04T18:53:49.600 に答える