[SPRING] Spring Rest : @ManyToOne 열을 가진 행을 삽입 할 수 없음
SPRINGSpring Rest : @ManyToOne 열을 가진 행을 삽입 할 수 없음
https://spring.io/guides/gs/accessing-data-rest/에서 봄을 시작하고 있습니다.
Person 엔티티에 @ManyToOne 관계가있는 다른 엔티티 책을 추가했습니다. Person 엔티티에는 bikes라는 새 속성이 있으며 Bike 엔티티와 @OneToMany 관계가 있습니다. 시작 프로젝트와 다른 점은 getter 및 setter가있는 새로운 속성입니다.
package hello;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String firstName;
private String lastName;
@OneToMany
private List<Bike> bikes;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public List<Bike> getBikes() {
return bikes;
}
public void setBikes(List<Bike> bikes) {
this.bikes = bikes;
}
}
Entity Bike에 대한 설명은 다음과 같습니다.
package hello;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class Bike {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
@ManyToOne
@JoinColumn(nullable = false)
private Person person;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
PersonRepository.java가 자습서에서 변경되지 않았습니다.
package hello;
import java.util.List;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> {
List<Person> findByLastName(@Param("name") String name);
}
BikeRepository.java는 자전거 요청을 처리하는 새로운 저장소입니다.
package hello;
import java.util.List;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource(collectionResourceRel = "bikes", path = "bikes")
public interface BikeRepository extends PagingAndSortingRepository<Bike, Long> {
List<Bike> findByName(@Param("name") String name);
}
꽤 간단 하죠? curl을 사용하여 새로운 Person을 생성 할 수 있어야한다 (튜토리얼에서와 같이).
curl -i -X POST -H "Content-Type:application/json" -d "{ \"firstName\" : \"Frodo\", \"lastName\" : \"Baggins\" }" http://localhost:8080/people
그리고 그것은 작동합니다 :
그러나 curl 명령으로 새로운 자전거를 추가하려고 할 때 :
curl -i -X POST -H "Content-Type:application/json" -d "{ \"name\" : \"Frodos Bike\", \"person\" : { \"firstName\" : \"Frodo\", \"lastName\" : \"Baggins\" } }" http://localhost:8080/bikes
다음 오류가 발생합니다.
나는 "person_id"속성을 제공하는 경우에도 같은 오류가 발생합니다.
curl -i -X POST -H "Content-Type:application/json" -d "{ \"name\" : \"Frodos Bike\", \"person_id\" : \"1\" }" http://localhost:8080/bikes
내 질문은 : 어떻게 새로운 자전거를 추가 할 수 있습니까?
해결법
-
==============================
1.BikeRepository가 {firstName : "Frodo", lastName : "Baggins"}라는 Person이 나타내는 행을 알 수있는 방법은 없습니다. BikeRepository에게 어떻게 또는 어디서 질문을 할 것인지 알려줘야합니다.
BikeRepository가 {firstName : "Frodo", lastName : "Baggins"}라는 Person이 나타내는 행을 알 수있는 방법은 없습니다. BikeRepository에게 어떻게 또는 어디서 질문을 할 것인지 알려줘야합니다.
시험
curl -i -X POST -H "Content-Type : application / json"-d "{\"name \ ": \ Frodos Bike \", \ "person \": "http : // localhost : 8080 / people / 1 "}"http : // localhost : 8080 / bikes
그렇게하면 Person 엔티티에 대해 http : // localhost : 8080 / people / 1을 쿼리합니다.
그것은 또한 매개 변수 기반 쿼리와 함께 작동합니다, 그냥 http : // localhost : 8080 / people {name} 쿼리로 대체합니까? name = 'Frodo'
희망이 도움이됩니다!
-
==============================
2.curl -i -X POST -H "Content-Type : application / json"-d "{\"name \ ": \"Frodos Bike \ ", \"person \ ": \"/ people / 1 \ "로 시도하십시오. } "http : // localhost : 8080 / bikes
curl -i -X POST -H "Content-Type : application / json"-d "{\"name \ ": \"Frodos Bike \ ", \"person \ ": \"/ people / 1 \ "로 시도하십시오. } "http : // localhost : 8080 / bikes
from https://stackoverflow.com/questions/42929828/spring-rest-cannot-insert-rows-that-have-manytoone-column by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 이름이 AuthenticationManager 인 빈을 만드는 중 오류가 발생했습니다. (0) | 2019.02.27 |
---|---|
[SPRING] 엔티티 관계가 제대로 채워지지 않습니다. (0) | 2019.02.27 |
[SPRING] 실제로 각 어댑터를 작성하지 않고 메시지 구동 어댑터 목록을 연결하는 방법은 무엇입니까? (0) | 2019.02.27 |
[SPRING] NoSuchMethodException : org.springframework.boot.autoconfigure.http.HttpMessageConverters (0) | 2019.02.27 |
[SPRING] 아약스에 의해 스프링 컨트롤러로부터 어떻게 데이터를 얻을 수 있습니까? (0) | 2019.02.27 |