在Hibernate 中保留枚舉值:排除錯誤的列類型
在資料持久化領域,確保資料模型、資料庫模式之間的兼容性,它們各自的映射是必不可少的。在 Java 中使用枚舉類型時,確定 Hibernate 如何將這些枚舉映射到底層資料庫至關重要。
在您的範例中,您已將 MySQL 列定義為枚舉並在 Java 中建立了對應的枚舉程式碼。但是,您遇到以下錯誤:「MyApp.Person 中性別列的列類型錯誤。發現:枚舉,預期:整數。」當Hibernate 期望Gender 列為整數時,由於枚舉被視為序數或字串(取決於@Enumerated 註解的規範),就會出現此錯誤。
要解決此問題,您可以明確指定使用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 腳本。
以上是如何確保 Hibernate 在對應到 MySQL 枚舉列時保留枚舉值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!