概要
Spring Data MongoDBでは、MongoDBでデータアクセスのドキュメントで紹介されている通り、Documentの保存・取得用にPOJOのクラスを使用してRepositoryを通してDBの操作が行えます。ではこのクラスにenumのプロパティを設定した場合、どういう動作になるかというメモ書きです。
前提
- 今回使用したSpring Boot Starter Data MongoDBのバージョンは
3.3.3
です。
動作確認用のクラス(Java)
以下のようにenumのプロパティを設定したクラスを、Repository経由で保存・取得した場合の動作を確認しました。
UrlDocument.java
@Document(collection = "url")
public record UrlDocument(
@Field("url_id")
String urlId,
String url,
@Field("url_type")
UrlTypeEnum urlType, // enumのプロパティ
) {
}
UrlTypeEnum.java
public enum UrlTypeEnum {
X,
Instagram,
Threads,
Web
}
確認した結果
結果としてenumの値が文字列としてDBに保存され、取得する際もenumの値に変換されました。
spring-boot-starter-data-mongodb Map enum to String in the entityのstackoverflowでの回答にある通り、enumから文字列の変換はSpring Data MongoDBはよしなにやってくれるようです。今回は試してないですが、enumに数値の値を別途持たせたい場合はMongoDb - Spring Boot - Enum Typeのstackoverflowでの回答にある通り、@Field(targetType = FieldType.INT32)
のアノテーションを付与すれば動くそうです。