Метод вставки Scala Phantom Cassandra возвращает пустой ResultSet

Я хочу вставить данные в мою таблицу в Cassandra, а затем вернуть значение из столбца "user_id" вместо полного ResultSet. Вот фрагмент моего кода:

   def create(user: User): Future[UUID] = {
     insert
       .value(_.id, user.id)
       .value(_.email, user.email)
       .value(_.name, user.name)
       .consistencyLevel_=(ConsistencyLevel.ALL)
       .future()
       .map(r => fromRow(r.one()).id)
    }

   def fromRow(r: Row): User = {
     User(id(r), email(r), name(r))
   }

Поэтому future() возвращает Future[ResultSet]. После этого я пытаюсь извлечь Row из ResultSet, изменить его на User и в итоге получить id. Несмотря на то, что данные были сохранены в моей таблице, я получил

ResultSet [исчерпано: правда, столбцы []]

столбцы ResultSet пусты и, следовательно, r.one() вернул ноль. Я не нашел примеров для моей цели. Итак, может ли Phantom-DSL сделать что-то вроде Quill?

val q = quote {
  query[Product].insert(lift(Product(0L, "My Product", 1011L))).returning(_.id)
}

1 ответ

Решение

Так что в более поздних версиях фантома create метод генерируется автоматически. Подробнее здесь. fromRow Метод также генерируется автоматически, поэтому вам не нужно вводить его вручную.

Короче говоря, это то, что вы могли бы использовать:

def create(user: User): Future[UUID] = {
  store(user)
    .consistencyLevel_=(ConsistencyLevel.ALL)
    .future()
    .map(_ => user.id)
}
Другие вопросы по тегам