Hibernate での Enum 値の保持: 間違った列タイプのトラブルシューティング
データ永続性の領域では、データ モデル、データベース スキーマ間の互換性を確保します。 、それぞれのマッピングが重要です。 Java で列挙型を扱う場合、Hibernate がこれらの列挙型を基礎となるデータベースにどのようにマップするかを確立することが重要です。
あなたの場合、MySQL 列を列挙型として定義し、Java で対応する列挙型を作成しました。コード。ただし、次のエラーが発生します。「MyApp.Person の列 Gender の列の種類が間違っています。見つかった値: enum、期待される値: integer」。このエラーは、@Enumerated アノテーションの仕様に応じて enum が序数または文字列として扱われるため、Hibernate が Gender 列が整数であると想定している場合に発生します。
この問題を解決するには、 columnDefinition 属性を使用した列の定義:
<code class="java">@Column(columnDefinition = "enum('MALE','FEMALE')") @Enumerated(EnumType.STRING) private Gender gender;</code>
列定義を指定すると、Hibernate に列の型を推測せず、指定された定義に従うように指示します。
または、 Hibernate を使用してスキーマを生成しない場合は、列定義値を次のように任意の値に設定することで、その必要性を取り除くことができます。
<code class="java">@Column(columnDefinition = "enum('DUMMY')") @Enumerated(EnumType.STRING) private ManyValuedEnum manyValuedEnum;</code>
この方法で、列挙値が Java に確実に保持されるようにすることができます。 Liquibase または SQL スクリプトを適宜同期しながら enum を実行します。
以上がMySQL Enum 列にマッピングするときに Hibernate が確実に Enum 値を保持するようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。