ホームページ  >  記事  >  データベース  >  MySQL Enum 列にマッピングするときに Hibernate が確実に Enum 値を保持するようにするにはどうすればよいですか?

MySQL Enum 列にマッピングするときに Hibernate が確実に Enum 値を保持するようにするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 07:58:29510ブラウズ

How to Ensure Hibernate Preserves Enum Values When Mapping to a MySQL Enum Column?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。