[SPRING] Spring 데이터 REST URI 대 엔티티 ID
SPRINGSpring 데이터 REST URI 대 엔티티 ID
스프링 데이터 REST (특히 Spring HATEOAS)는 엔티티 ID에서 RESTful ID (즉, URI)를 분리하고 새로운 객체를 저장할 때 다시 연결하는 데 문제가 있습니다. 이 디커플링에 대한 흥미로운 토론은 https://github.com/SpringSource/spring-data-rest/issues/13에서 확인하십시오.
클라이언트 응용 프로그램이 연관된 TicketCategory 자원으로 새 Ticket 자원을 작성하려고한다고 가정합니다. 원격 스프링 데이터 REST 엔드 포인트에 대해 티켓을 게시하고 싶습니다. 티켓은 신품이기 때문에 아직 ID가 없습니다. TicketCategory에는 ID가 있지만 클라이언트에서는 위의 토론마다 URI입니다. 그래서 티켓을 저장할 때, Spring Data REST는 Ticket을 Spring Data JPA에 전달하는데, Spring Data JPA는 그것을 좋아하지 않는다 : Spring Data JPA는 Entity ID가없는 TicketCategory가 일시적이라고 생각한다 :
org.hibernate.TransientPropertyValueException:
Not-null property references a transient value -
transient instance must be saved before current operation:
com.springinpractice.ch13.helpdesk.model.Ticket.category ->
com.springinpractice.ch13.helpdesk.model.TicketCategory
업데이트 :
https://github.com/SpringSource/spring-data-rest/wiki/JPA-Repository-REST-Exporter
엔티티 간 관계를 설정하기 위해 HTTP POST를 사용하는 체계를 설명하는 "Updating relationships"이라는 섹션이 있습니다. 나는 그것이 현재 가능한 유일한 접근 방법인지는 모르지만,이 접근법은 초기 게시물에 연관 null을 남겨두고 다음 게시물로 업데이트해야하는 것으로 보입니다. 티켓의 경우 카테고리 필드가 필요하므로 (위의 경우 @NotNull) 바람직하지 않습니다.
해결법
-
==============================
1.https://github.com/SpringSource/spring-data-rest/wiki/Embedded-Entity-references-in-complex-object-graphs에서 보셨나요?
https://github.com/SpringSource/spring-data-rest/wiki/Embedded-Entity-references-in-complex-object-graphs에서 보셨나요?
간단히 말해서, 수출자는 관계 또는 관리 객체 (내 보낸 리포지토리가있는 다른 엔티티) 대신 연결 객체를 찾으면 링크 객체의 참조를 해제합니다.
연결된 속성이 "category"라고 가정하면 다음과 같이 새 티켓을 만들 수 있습니다.
POST /tickets Content-Type: application/json { "description": "Description of the ticket or issue", "category": { "rel": "category.Category", "href": "http://localhost:8080/categories/1" } }
-
==============================
2.분명히 Spring Data Rest의 최신 버전에서는 다음과 같이해야합니다.
분명히 Spring Data Rest의 최신 버전에서는 다음과 같이해야합니다.
POST /tickets Content-Type: application/json { "description": "Description of the ticket or issue", "category": "http://localhost:8080/categories/1" }
Oliver Gierke의 Spring 데이터 Rest 2.0.0 릴리즈에 대한 코멘트가 나온다 .RELEASE는 RC1 이전에 코드 작업을 중단했다.
from https://stackoverflow.com/questions/12879975/spring-data-rest-uri-vs-entity-id by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 컨텍스트에서 Maven settings.xml 속성 사용하기 (0) | 2019.02.23 |
---|---|
[SPRING] 유닛 테스트 결과 : HsqlException 사용자에게 권한이 없거나 객체를 찾을 수 없음 : ROWNUM (0) | 2019.02.23 |
[SPRING] @Required 주석은 JavaConfig와 어떻게 작동합니까? (0) | 2019.02.23 |
[SPRING] Spring : @Qualifier와 Property Placeholder 사용하기 (0) | 2019.02.23 |
[SPRING] Spring AOP CGLIB 프록시의 필드가 null입니다. (0) | 2019.02.23 |