Spring Data REST에 @OneToMany 서브 리소스 연결 게시
Spring Data REST boot bootSpring Boot 、 Spring Boot 、 Spring Boot 、 Spring Boot 、 Spring Boot 、 Spring Data REST 、 Spring Data REST 。 엔티티가 .Post
@OneToMany
엔티티와의 Comment
이러한 클래스는 다음과 같이 구성되어 있습니다.
Post.java:
@Entity
public class Post {
@Id
@GeneratedValue
private long id;
private String author;
private String content;
private String title;
@OneToMany
private List<Comment> comments;
// Standard getters and setters...
}
Comment.java:
@Entity
public class Comment {
@Id
@GeneratedValue
private long id;
private String author;
private String content;
@ManyToOne
private Post post;
// Standard getters and setters...
}
REST 는 Spring Data REST JPA의 기본 입니다.CrudRepository
:
PostRepository.java:
public interface PostRepository extends CrudRepository<Post, Long> { }
CommentRepository.java:
public interface CommentRepository extends CrudRepository<Comment, Long> { }
애플리케이션 엔트리 포인트는 표준적이고 심플한 Spring Boot 애플리케이션입니다.모두 구성된 재고입니다.
어플.자바
@Configuration
@EnableJpaRepositories
@Import(RepositoryRestMvcConfiguration.class)
@EnableAutoConfiguration
public class Application {
public static void main(final String[] args) {
SpringApplication.run(Application.class, args);
}
}
모든 것이 정상적으로 동작하고 있는 것 같다.응용 프로그램을 실행하면 모든 것이 정상적으로 동작하는 것처럼 보입니다.를 POST에 할 수 .http://localhost:8080/posts
다음과 같이 합니다.
★★★★★★★★★★★★{"author":"testAuthor", "title":"test", "content":"hello world"}
:http://localhost:8080/posts/1
:
{
"author": "testAuthor",
"content": "hello world",
"title": "test",
"_links": {
"self": {
"href": "http://localhost:8080/posts/1"
},
"comments": {
"href": "http://localhost:8080/posts/1/comments"
}
}
}
에서 하면 GET이 .http://localhost:8080/posts/1/comments
객체가 {}
「URI」 「HTTP 405 Method Not Allowed 」(HTTP 405 Method Not Allowed 。
입니까?Comment
수 있습니다.Post
★★★★★★★★★★★★★★★★★★★★★★★★★★★에 직접 POST 하는 은 피하고 http://localhost:8080/comments
가능하면.
URI가 post URI로 의가 검출되었다고 합니다.$association_uri
다음)에서는 일반적으로 다음 단계를 수행합니다.
수집 리소스 관리 주석을 검색합니다.
curl -X GET http://localhost:8080 200 OK { _links : { comments : { href : "…" }, posts : { href : "…" } } }
하다를 .
comments
및 " " "POST
「CHANGE MARGE:」curl -X POST -H "Content-Type: application/json" $url { … // your payload // … } 201 Created Location: $comment_url
하려면 , 「」를 합니다.
PUT
URI를 사용하다curl -X PUT -H "Content-Type: text/uri-list" $association_url $comment_url 204 No Content
마지막 단계에서는 의 사양에 따라 여러 개의 URI를 전송하여 여러 개의 코멘트를 동시에 할당하기 위해 줄 바꿈으로 구분하여 주십시오.
반반인설설설설설결결메메메메메메메메 。를 할 때 좋은 입니다. '/어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '어울리다', '', '어울리다', '어울리다', '', '어울리다', '', '어울리다', '어울리다'Comment
Post
아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 이런 것도 피하세요.CommentRepository
완전히.코멘트 자체에 라이프 사이클이 없는 경우(보통 컴포지션 형식의 관계에는 없는 경우), 코멘트를 인라인으로 직접 렌더링하여 코멘트를 추가 및 삭제하는 전체 프로세스를 JSON 패치를 사용하여 처리할 수 있습니다.Spring Data REST는 다음 버전 2.2의 최신 릴리스 후보에서 이러한 지원을 추가했습니다.
코멘트를 먼저 투고해야 하며, 코멘트를 투고하는 동안 협회 투고 엔티티를 작성할 수 있습니다.
다음과 같이 표시됩니다.
http://{server:port}/comment METHOD:POST
{"author":"abc","content":"PQROHSFHFSHOFSHOSF", "post":"http://{server:port}/post/1"}
그러면 완벽하게 잘 될 거야
매핑에는 연관성과 구성 두 가지 유형이 있습니다.어소시에이션의 경우 다음과 같은 조인테이블 컨셉을 사용하였습니다.
종업원--1 ~n-> 부문
따라서 Association Employee, Department, Employee_Department의 경우 3개의 테이블이 생성됩니다.
사용자 코드에 Employee Repository만 생성하면 됩니다.이 매핑과는 별도로 다음과 같이 해야 합니다.
class EmployeeEntity{
@OnetoMany(CascadeType.ALL)
private List<Department> depts {
}
}
Department Entity에는 Forign 키에 대한 매핑이 포함되어 있지 않습니다.따라서 싱글 json 요청으로 Department with Employee with Department를 추가하기 위한 POST 요청을 시도하면 추가됩니다.
동일한 시나리오에 직면하여 1대 다의 매핑을 사용하여 메인 엔티티 자체를 통해 데이터를 풀했기 때문에 서브 엔티티의 저장소 클래스를 삭제해야 했습니다.지금은 데이터로 전체 답변을 받고 있습니다.
oneToMany 매핑의 경우 매핑할 클래스에 대한 POJO와 @OneToMany 주석을 만들면 내부적으로 해당 테이블 ID에 매핑됩니다.
또한 데이터를 검색하는 클래스에 직렬화 가능 인터페이스를 구현해야 합니다.
언급URL : https://stackoverflow.com/questions/25311978/posting-a-onetomany-sub-resource-association-in-spring-data-rest
'programing' 카테고리의 다른 글
Laravel 웅변가:조인된 테이블에서 특정 열만 가져오는 방법 (0) | 2023.01.17 |
---|---|
Arrays.asList()에 의해 작성된 목록의 remove()가 UnsupportedOperation을 슬로우합니다.예외. (0) | 2023.01.17 |
org.w3c.dom을 로드하려면 어떻게 해야 하나요?XML에서 문자열로 문서를 작성하시겠습니까? (0) | 2023.01.17 |
yaml: 행 8: 예상된 키를 찾을 수 없습니다. (0) | 2023.01.17 |
Python의 무한대 해시에 ?자리가 있는 이유는 무엇입니까? (0) | 2023.01.17 |