Comment maintenir bi-directionnelle des relations avec le Printemps, les Données de REPOS et de JPA?

De travail avec le Printemps des Données RESTE, si vous avez un OneToMany ou ManyToOne relation, l'opération de placement des rendements de 200 sur la "non-propriétaire" de l'entité, mais n'en fait persister le joint de ressources.

Exemple Entités:

@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
}

Si vous en arrière avec un PagingAndSortingRepository, vous pouvez OBTENIR un Book, suivez les authors lien sur le livre et d'en faire un avec l'URI d'un auteur à associer avec. Vous ne pouvez pas aller dans l'autre sens.

Si vous faire un GET sur un Auteur et faire METTRE sur son books lien, la réponse renvoie à 200, mais la relation n'est jamais conservée.

Est-ce le comportement attendu?

  • Bi-directionnel associations doivent être gérés manuellement dans le modèle d'objet qui est généralement fait à l'intérieur des organismes de normalisation. Printemps de Données RESTE utilise le champ d'accès par défaut. Que signifie le changement dans les associations ne se reflète pas sur l'autre côté de l'association, par définition. Avez-vous essayé, le déclenchement de la synchronisation dans un @PrePersist/@PreUpdate méthode? Ou de passer à l'accès à la propriété?
  • J'avais aussi le droit de vote pour résoudre le bidirectionnel de l'association. Un Author peut exister sans un Book. Books pour un Author peuvent être récupérées en utilisant un référentiel méthode Set<Book> BookRepository.findByAuthor(Author author). Cela simplifie le modèle tout à fait un peu comme vous n'avez pas à maintenir manuellement les références.
  • J'ai pu voir une interface de la bibliothèque où vous auriez besoin de trouver un auteur, puis affichez-les livres. Ce ne serait pas être pris en charge sans bi-directionnelle des associations. Pas fan de la gestion des entités, associations, si elle n'est pas l'intention de DONNÉES de REPOS. Merci pour l'entrée, et le filtrage de l'auteur de livres semble être la meilleure approche. Ne pas garder les choses unidirectionnel chaque fois que possible. 🙂
InformationsquelleAutor keaplogik | 2015-05-26