Saya memiliki masalah yang sama beberapa hari yang lalu tetapi tidak menemukan apa pun dalam dokumentasi tentang sealed traits
untuk memodelkan ADT di MongoDB.
Pada akhirnya, saya menggunakan sealed class
seperti yang disarankan dalam resmi scala driver github repo
.
Jika Anda benar-benar ingin menggunakan sifat (karena definisi metode abstrak), Anda dapat melakukan sesuatu seperti ini:
package example.model
import example.model.adt._
import org.mongodb.scala.bson.ObjectId
import org.mongodb.scala.bson.codecs.Macros._
import org.mongodb.scala.bson.codecs.DEFAULT_CODEC_REGISTRY
import org.bson.codecs.configuration.CodecRegistries.{fromProviders, fromRegistries}
trait MongoModel {
def _id: ObjectId
}
object MongoModel {
val codecRegistery = fromRegisteries(fromProviders(classOf[A]), DEFAULT_CODEC_REGISTRY)
}
Sekarang Anda dapat menetapkan ADT untuk A Anda dengan sealed class
.
package example.model.adt
import example.model.MongoModel
import org.mongodb.scala.bson.ObjectId
sealed class A
final case class B(_id: ObjectId) extends A with MongoModel
final case class C(_id: ObjectId) extends A with MongoModel
Jawaban ini tidak menyelesaikan pertanyaan secara langsung tetapi memberikan solusi yang layak. Perhatikan bahwa kode ini hanyalah sebuah contoh. Untuk implementasi yang lebih lengkap, Anda dapat melihat repo github ini .