2017-11-09 14 views
0

Springデータの残りの1つのcrudリポジトリを使用して複数のエンティティを管理する可能性があることを知る必要があります。すべてのエンティティを1つのcrudリポジトリで管理するSpringデータ残り

例:

図書館実体

@Entity 
public class Library { 

    @Id 
    @GeneratedValue 
    private long id; 

    @Column 
    private String name; 

    @OneToMany(mappedBy = "library") 
    private List<Book> books; 
} 

ブックエンティティ

@Entity 
public class Book { 

    @Id 
    @GeneratedValue 
    private long id; 

    @Column(nullable=false) 
    private String title; 

    @ManyToOne 
    @JoinColumn(name="library_id") 
    private Library library; 

} 

私の要件は

public interface LibraryRepository extends CrudRepository<Library, Long> { } 

は、両方のライブラリを管理するためだけに、このリポジトリを持つことですおよび本の実体。

これまでに試してみましたが、これまでうまくいきました。このアプローチでは他の操作はサポートされていません。これを行うための2つのcrudリポジトリを持つのではなく、他のアプローチがあります。

+0

できません。 それぞれのリポジトリはデータベースデータを対応するJavaオブジェクトに変換するため、各エンティティに個別のリポジトリインタフェースを作成する必要があります。 –

+0

どのような操作、まさにあなたは問題がありますか?別の場所で提案されているカスケード操作を追加することに加えて、ここで参照してください:https://stackoverflow.com/questions/30464782/how-to-maintain-bi-directional-relationships-with-spring-data-rest-and-jpa –

答えて

1

を定義したエンティティタイプでインスタンス化する必要があるので、あなたは、単にそれを行うことはできません。そして、あなたはあなたのライブラリとその本は、このペイロードで更新/作成することができます

@OneToMany(mappedBy = "library", cascade = CascadeType.ALL, orphanRemoval = true) 
private List<Book> books; 

:春データ作者の

{ 
    "name": "library1", 
    "books": [ 
     { 
      "title": "book1" 
     }, 
     { 
      "title": "book2" 
     } 
    ] 
} 

コードexampleをちょうどこのような小さなあなたのライブラリを修正します。

私のexample

+0

restbucksの例とは異なり、質問者のモデルは、何か変更されない限り、残りのリポジトリには問題があります。 https://stackoverflow.com/questions/30464782/how-to-maintain-bi-directional-relationships-with-spring-data-rest-and-jpaあなたはあなたの例でそれをどうやって扱いますか? –

+0

@AlanHayここではbi-di関係は必要ないと私は同意します。あなたが指摘した問題について私は知っています。私の例では、同期した 'setItems(リストアイテム)'(https://github.com/Cepr0/restvotes/blob/master/src/main/java/restvotes/domain/entity/Menu.java)を実装しました'Menu'と' MenuItem'と二つのアノテーション '@RestResource(@RestResource())を追加しました(https://github.com/Cepr0/restvotes/blob/master/src/main/java/restvotes/domain/entity/MenuItem.java) exported = false) 'と' @ JsonIgnore'を 'MenuItem'のメニューゲッターに追加して、不要な' Menu'データをレスポンスボディに残さないようにします。 – Cepr0

0

Beanがリポジトリごとに作成され、このBeanは、あなたができるもちろん

+0

どのように挿入が可能です – MaxExplode

+0

@MaxExplode CrudRepositoryの定義を確認してください。https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html、その2つのジェネリックスが付属しているので、これらのジェネリックをインスタンス化するときには、ジェネリックを指定する必要があります。また、Beanを作成するときには、定義された型はBeanと一緒に出荷されるので、save methosはセーブです(Sエンティティ)たとえば、エンティティXを使用すると、saveはsave(Xエンティティ)として定義されます –

関連する問題