Spring + Google Datastore: @ Ссылка не сохраняется - PullRequest
0 голосов
/ 14 февраля 2020

Я использую org.springframework.cloud:spring-cloud-gcp-starter-data-datastore с Kotlin.

Код выглядит следующим образом:

@Entity(name = "books")
data class Book(
    @Reference val writer: Writer,
    var name: String,
    @Id val id: Key? = null, //I leave the key as NULL so it that can be autogenerated
)

@Entity(name = "writers")
data class Writer(
    var name: String,
    @Id val id: Key? = null
)

//Also with Repositories

Когда я сохраняю сущность Book со ссылкой на сохраненный Writer , когда я его получаю, он должен быть получен автоматически, верно?

Пример кода:

var w = Writer("Shakespeare")
w = writerRepo.save(w)
var book = Book(w, "Macbeth")
book = bookRepo.save(book)

books = bookRepo.findByWriter(w) //Error happen here

Приведенный выше код выдаст ошибку, которая не смогла создать экземпляр Book с NULL Writer. Есть идеи, почему это произошло?

1 Ответ

1 голос
/ 14 февраля 2020

Я считаю, что ответ не в том, что связь не сохраняется, а в том, что хранилище устанавливает сущность отношения после создания экземпляра. Репозиторий пытается сначала создать экземпляр сущности, присвоить ему NULL для атрибута отношения (помеченного @References).

Следовательно, сущность должна быть такой:

@Entity(name = "books")
data class Book(
    @Reference var writer: Writer?, //Accepting NULL values
    var name: String,
    @Id val id: Key? = null
)

И все работает хорошо.

...