これは、デフォルトの長さが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
に表示されます。;必要に応じてこれを変更する必要があります。