2017-11-09 1 views
0

봄 데이터 나머지에는 하나의 crud 리포 지 토리가있는 여러 엔터티를 관리 할 수있는 가능성이 있는지 알아야합니다.하나의 crud 저장소로 모든 엔티티를 관리하는 스프링 데이터 나머지

예 :

라이브러리 개체

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

두 라이브러리를 관리 할 수있는 경우에만이 저장소를 가지고입니다 그리고 책 엔티티.

삽입을 시도하고 지금까지 잘 작동합니다. 이 방법으로는 다른 작업이 지원되지 않습니다. 이것을하기위한 두 개의 crud 저장소가있는 것보다 다른 접근 방법이 있습니까? 당신은 콩 각 저장소에 대해 생성되고이 콩이 개체 유형 인스턴스화해야하기 때문에 단순히, 당신이 할 수 물론

+0

수 없습니다. 각 특정 리포지토리는 해당 데이터베이스 데이터를 해당 Java 객체로 변환해야하므로 각 엔티티에 대해 별도의 리포지토리 인터페이스를 만들어야합니다. –

+0

정확히 어떤 작업을 수행하고 있습니까? 다른 곳에서 제안 된 계단식 작업을 추가하는 것 외에도 다음 페이지를 참조하십시오. https://stackoverflow.com/questions/30464782/how-to-maintain-bi-directional-relationships-with-spring-data-rest-and-jpa –

답변

1

정의했다고 할 수 없다

+0

restbucks 예제와 달리 질문자의 모델은 무언가가 변경되지 않는 한 나머지 리포지토리에 문제가되는 양방향 관계를 갖습니다. https://stackoverflow.com/questions/30464782/how-to-maintain-bi-directional-relationships-with-spring-data-rest-and-jpa 어떻게 당신이 당신의 예제에서 그것을 처리합니까? –

+0

@ AlanHay 여기 bi-di 관계는 필요 없다는 데 동의합니다. 그리고 내가 지적한 문제에 대해서도 알고 있습니다. 나의 예에서 (https://github.com/Cepr0/restvotes/blob/master/src/main/java/restvotes/domain/entity/Menu.java) 동기화 한'setItems (List items)'을 구현했다. 'Menu'와'MenuItem'과 두번째 주석'@RestResource (@RestResource (/)/exported = false)'와'@JsonIgnore'를'MenuItem'의 메뉴 게터에 추가하여 불필요한'Menu' 데이터를 피할 수 있습니다. – Cepr0

0

. 그냥 도서관과 같이 조금 수정 :

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

는 그런 다음 생성/당신의 도서관이 페이로드의 책을 업데이트 할 수 있습니다

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

코드 봄의 데이터 저자의 example을.

example.

+0

방법 삽입이 가능한 경우 – MaxExplode

+0

@MaxExplode CrudRepository의 정의를 확인하십시오. https : //docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html, 해당 두 개의 Generics가 함께 제공되므로 인스턴스를 만들 때 이러한 generics를 지정해야하며 bean을 만들 때 정의 된 유형이 bean과 함께 제공되므로 save methos가 저장됩니다 (S entity). 여기서 S는 엔티티이므로 CrudRepository를 정의 할 때 예를 들어 엔터티 X를 사용하면 save는 save (X 엔티티)로 정의됩니다. –

관련 문제