Wie pflegt bi-direktionale Beziehungen mit Spring Data REST und JPA?

Arbeit mit Spring Data REST, wenn Sie eine OneToMany oder ManyToOne Beziehung, die PUT-operation gibt 200 auf die "nicht-Besitz" - Entität, aber nicht tatsächlich bestehen die verknüpfte Ressource.

Beispiel Unternehmen:

@Entity(name = 'author')
@ToString
class AuthorEntity implements Author {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id

    String fullName

    @ManyToMany(mappedBy = 'authors')
    Set<BookEntity> books
}


@Entity(name = 'book')
@EqualsAndHashCode
class BookEntity implements Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id

    @Column(nullable = false)
    String title

    @Column(nullable = false)
    String isbn

    @Column(nullable = false)
    String publisher

    @ManyToMany(fetch = FetchType.LAZY, cascade = [CascadeType.ALL])
    Set<AuthorEntity> authors
}

Wenn Sie wieder mit einem PagingAndSortingRepository können Sie eine Book Folgen Sie den authors link auf das Buch und nicht eine mit der URI von einem Autor zuordnen. Sie können den anderen Weg gehen.

Wenn Sie ein GET auf einen Autor und eine auf Ihre books link, die Antwort gibt 200, aber die Beziehung wird nie gespeichert.

Ist dies das erwartete Verhalten?

  • Bi-direktionale Assoziationen müssen manuell verwaltet werden, in das Objekt-Modell, das erfolgt in der Regel innerhalb des setters. Spring Data REST verwendet field access standardmäßig. Das bedeutet, dass die änderung in vereinen wird nicht widergespiegelt, auf der anderen Seite des Vereins per definition. Haben Sie versucht, die Auslösung der Synchronisation in einem @PrePersist/@PreUpdate Methode? Oder wechseln Sie zu Eigenschaften zugreifen?
  • Ich würde auch Stimmen zu beheben, die eine bidirektionale Assoziation. Ein Author existieren kann ohne ein Book. Books für eine Author abgerufen werden können, mithilfe eines repository-Methode Set<Book> BookRepository.findByAuthor(Author author). Dies vereinfacht das Modell ganz ein bisschen, wie Sie nicht haben, um manuell verwalten, Referenzen.
  • Ich konnte sehen, eine library-Schnittstelle, wo würden Sie brauchen, zu finden, ein Autor, wenn es dann Bücher. Dies würde nicht unterstützt werden, ohne die bi-direktionale Assoziationen. Nicht ein fan von der Verwaltung der Entitäten, die Assoziationen, wenn es nicht die Absicht, DATEN REST. Vielen Dank für den input und die Filterung für die Autorin der Bücher zu sein scheint der beste Ansatz. Nicht, um die Dinge einseitig, Wann immer möglich. 🙂
InformationsquelleAutor keaplogik | 2015-05-26
Schreibe einen Kommentar