Doobie 查询具有值 Class 字段的实体
Doobie Query for Entities with Value Class Fields
我正在使用 Doobie 来管理数据库持久性。我在实体 Foo
中使用 value class 字段,即
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 {...
关于如何解决这个问题的任何建议?使用值 class 是一个坏主意,首先,什么时候涉及到实体?谢谢
Doobie 能够将查询读入 case class
es。如果您将 case classes 想象成元组,并且想象您可以将它们展平,那么当您将事物查询到 case class.
时,这就是 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._
我正在使用 Doobie 来管理数据库持久性。我在实体 Foo
中使用 value class 字段,即
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 {...
关于如何解决这个问题的任何建议?使用值 class 是一个坏主意,首先,什么时候涉及到实体?谢谢
Doobie 能够将查询读入 case class
es。如果您将 case classes 想象成元组,并且想象您可以将它们展平,那么当您将事物查询到 case class.
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._