我正在使用Doobie来管理数据库持久性。我在我的实体中使用值类字段,Foo
即
case class CreatedOn(value: LocalDateTime) extends AnyVal
case class Resource(value: String) extends AnyVal
case class Foo(id: Option[Int], resource: Resource, createdOn: CreatedOn)
implicit fooRead: Read[Foo] = Read[(Option[Int], String, LocalDateTime)].map {
case (oid, resource, createdOn) => Foo(oid, Resource(resource), CreatedOn(createdOn))
}
implicit fooWrite: Write[Foo] = Write[(Option[Int], String, LocalDateTime)].contramap {e => (e.oid, e.resource.value, e.createdOn.value}
但是编译器抱怨缺少Read[(Int, String, LocalDateTime)].map {...
有关如何解决此问题的任何建议?首先,使用价值类是个坏主意吗?谢谢
Doobie能够将查询读入case class
es。如果您将案例类想象为元组,并且可以将它们展平,那么这就是Doobie在将事物查询到案例类中时所做的事情。
Foo(Some(1), Resource("test"), CreatedOn(time))
(Some(1), Tuple1("test"), Tuple1(time))
(Some(1), "test", time) // (Option[Int], String, LocalDateTime)
如果推导失败,则可以检查以下哪个字段:
sql"".query[Int]
sql"".query[String]
sql"".query[LocalDateTime]
编译失败的行会告诉您缺少的实例。
根据我的经验,这是时间实例。您必须分别导入它们,而您可能没有导入
doobie.implicits.javatime._
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句