これは、デフォルトの長さがVARCHAR
であるためです。 ほとんどのJPAプロバイダー(HibernateおよびEclipseLinkを含む)によって作成されたDDLステートメントの列は255です。length
の指定 @Column
の属性 アノテーションは値をオーバーライドするのに役立ち、JPAプロバイダーのスキーマジェネレーターによって新しい値が取得されるようにします。
これは間違った仮定です。 JPAプロバイダーは、テーブルを1回だけ作成し、アプリケーションの存続期間中、および最初にテーブル定義を作成/更新するようにプロバイダーを構成した場合にのみ、基になるテーブルの長さを動的に変更しません。さらに、String
のデフォルトのマッピング SQL VARCHAR
です タイプ。
初期化プロセス中に、必要に応じて(場合によってはテーブルを削除した後)テーブルを作成するようにJPAプロバイダーを構成したようです。 Hibernateを使用している場合、これはhibernate.hbm2ddl.auto
を使用して行われます。 persistence.xml
で指定されたプロパティ 値がupdate
、create
またはcreate-drop
。 EclipseLinkでは、プロパティeclipselink.ddl-generation
を指定します。 create-tables
の値を使用 またはdrop-and-create-tables
。
上記のプロパティの両方を本番環境で使用することはお勧めしません環境
。理想的なアプローチは、テーブルを作成するためのDDLスクリプトを用意することです。以来、VARCHAR
を使用しています 、列定義で適切な長さを指定する必要があります。ユーザー入力の最大長に合わせて 。さらに、VARCHAR
を使用しているため CHAR
以上 、データベースエンジンは、割り当てられるストレージスペースが保存されているレコードのサイズに依存することを保証します。
デフォルトのVARCHAR
への文字列が必要ない場合 マッピングし、代わりに別の有効なマッピングを使用する場合は、columnDefinition
を使用する必要があります @Column
の属性 注釈。 Calendar
をマッピングするための使用例 TIMESTAMPTZ
へ SQLデータ型は、 JPAWikiBook
に表示されます。;必要に応じてこれを変更する必要があります。