Аннотации @PrimaryKeyColumn должны иметь тип PARTITIONED для приложения Scala Cassandra Spring Data. - PullRequest
0 голосов
/ 09 января 2019

Я работаю над Cassandra Spring-data module, используя Scala. Я создал модель домена и установил хранилище crud.

Хранилище данных Spring настроено, как показано ниже:

@Repository
trait SampleRepository extends CassandraRepository[Sample, SampleKey]

Модель домена таблицы настраивается следующим образом:

@Table
 case class Sample(@PrimaryKey
              sampleKey: SampleKey,
              @Column("surName")
              surName: String)

Первичный ключ - составной ключ. Идентификатор столбца в качестве ключа раздела. имя столбца как ключ кластера

@PrimaryKeyClass
case class SampleKey(
                  @PrimaryKeyColumn( `type` = PrimaryKeyType.PARTITIONED, ordinal = 0, name = "id")
                  id: Int,
                  @PrimaryKeyColumn( `type` = PrimaryKeyType.CLUSTERED, ordinal = 1,  name = "name")
                  name: String
                )

В типе scala допустимое ключевое слово, поэтому используются обратные кавычки. Я ожидаю, что это сработает, но когда я запускаю приложение, но я получаю

Suppressed: org.springframework.data.mapping.MappingException: Composite primary key type [com.barclays.decisionstore.trac.model.SampleKey] has no fields annotated with @PrimaryKeyColumn
    at org.springframework.data.cassandra.core.mapping.PrimaryKeyClassEntityMetadataVerifier.verify(PrimaryKeyClassEntityMetadataVerifier.java:91)
    ... 262 common frames omitted
Suppressed: org.springframework.data.mapping.MappingException: At least one of the @PrimaryKeyColumn annotations must have a type of PARTITIONED
    at org.springframework.data.cassandra.core.mapping.PrimaryKeyClassEntityMetadataVerifier.verify(PrimaryKeyClassEntityMetadataVerifier.java:98)
    ... 262 common frames omitted

Это означает, что параметр типа аннотации не распознается Spring-Data.
Тот же код с классами модели Java работает без проблем.

Буду признателен за любые указатели или заменители для решения этой проблемы.

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Работает при использовании с классом с классом корпуса .

@PrimaryKeyClass
class SimpleKey{

 @PrimaryKeyColumn( `type` = PrimaryKeyType.PARTITIONED, ordinal = 0, name = "id")
 var id: Int =_ 
 @PrimaryKeyColumn( `type` = PrimaryKeyType.CLUSTERED, ordinal = 1,  name = "name")
 var name: String =_
}
0 голосов
/ 12 января 2019

На самом деле свойства Java-бина не распознаются, кроме аннотаций.

Scala не связывает переменные экземпляра как свойства бина по умолчанию в классах case. Для этого вам нужно добавить @BeanProperty аннотации к каждому свойству.

import scala.beans.BeanProperty

@PrimaryKeyClass
case class SampleKey(@BeanProperty
                     @PrimaryKeyColumn(`type` = PrimaryKeyType.PARTITIONED, ordinal = 0, name = "id")
                     id: Int,
                     @BeanProperty
                     @PrimaryKeyColumn(`type` = PrimaryKeyType.CLUSTERED, ordinal = 1, name = "name")
                     name: String)

Также, если вы получаете ошибку конструирования объекта, добавьте конструктор со значениями по умолчанию (для этого необходимо сделать переменные var):

@PrimaryKeyClass
case class SampleKey(@BeanProperty
                     @PrimaryKeyColumn(`type` = PrimaryKeyType.PARTITIONED, ordinal = 0, name = "id")
                     var id: Int,
                     @BeanProperty
                     @PrimaryKeyColumn(`type` = PrimaryKeyType.CLUSTERED, ordinal = 1, name = "name")
                     var name: String) {
  def this() = this(0, "")
}

Надеюсь, это поможет!

...