[SPRING] 봄 데이터 나머지를 통해 합성 테이블에 데이터를 저장할 수 없습니다 json post
SPRING봄 데이터 나머지를 통해 합성 테이블에 데이터를 저장할 수 없습니다 json post
나는 3 개의 테이블을 가지고있다. 훈련 - training_id (pk) 유저 프로필 - profile_id (pk) -training_profile (합성 테이블) - training_id - profile_id
profile_id = 44 인 user_profile 테이블에 이미 레코드를 저장하고 있으며 training 테이블에 대한 새 레코드를 만들고이 새 교육을 id 44가있는 기존 user_profile 레코드와 연결하려고합니다. 그러나 포스트 데이터가 training 테이블에 저장되었지만 검색 테이블 user_training에 삽입되지 않았습니다. 내 객체 클래스는 - 연수반
@Entity
@Table(name = "training", schema = "public")
public class Training implements java.io.Serializable {
@Id @GeneratedValue
@Column(name = "training_id", unique = true, nullable = false)
private Long trainingId;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "trainings")
private Set<UserProfile> userProfiles = new HashSet<UserProfile>(0);
@Column(name = "training_subject", length = 200)
private String trainingSubject;
public Training() {
}
public Long getTrainingId() {
return this.trainingId;
}
public void setTrainingId(Long trainingId) {
this.trainingId = trainingId;
}
public String getTrainingSubject() {
return this.trainingSubject;
}
public void setTrainingSubject(String trainingSubject) {
this.trainingSubject = trainingSubject;
}
public Set<UserProfile> getUserProfiles() {
return this.userProfiles;
}
public void setUserProfiles(Set<UserProfile> userProfiles) {
this.userProfiles = userProfiles;
}
}
우편 저를 통해 내 json 게시물
그리고 내가 얻은 반응
응답에 training_id가 67 인 테이블에 새로운 교육 레코드가 삽입 된 것으로 나타났습니다. 이 새로운 저장된 훈련에 대한 연관성 없음
다시 교육을위한 새로운 기록을 만들었고 기존 사용자 프로필과 연결되지 않았습니다. curl -i -X POST -H "Content-Type : application / json"-d "{\"trainingSubject \ ": \"Oracle \ " , \ "userProfiles \": [\ "/ userProfiles / 44 \"]} "http : // localhost : 8080 / api / trainings
해결법
-
==============================
1.상대 URL 할당을 사용할 수 있습니다.
상대 URL 할당을 사용할 수 있습니다.
{ "trainingSubject": "oracle", "userProfiles":["/userProfiles/44"] }
http : // localhost : 8080 / api / userProfiles / 44 또한 전체 URL을 사용해보십시오.
편집 됨
ManyToMany 관계의 소유 사이트를 Training으로 이동하면 위 JSON과 작동합니다. 그래서 현재 소유자는 부동산을 설정할 수 있습니다. 당신이 그렇게한다면 :
@ManyToMany @JoinTable(name = "user_training" , joinColumns = {@JoinColumn(name = "profile_id") } , inverseJoinColumns = {@JoinColumn(name = "training_id") }) private List<UserProfile> userProfiles = new ArrayList<>();
더
@ManyToMany(mappedBy = "userProfiles") private List<Training> trainings = new ArrayList<>();
Training은 userProfiles 내에서 관계를 소유합니다.
나는 당신의 경우에 그것이 지금 최고의 선택이라고 생각합니다. 또 다른 옵션은 트랜잭션에서 UserProfile의 소유자 사이트를 유지할 때 다음과 같은 관계를 업데이트하는 것입니다.
PATCH http://localhost:8080/api/userProfiles/44 { "trainings": ["trainings/66", "trainings/67"] }
그러나 이것으로 당신은 여러 번의 휴식을 취할 필요가 있습니다 (1. POST 새로운 훈련과 새로운 ID를 얻으십시오 2. 현재 훈련 목록을 얻으십시오 3. 새로 추가 된 훈련을 가진 PATCH 훈련 목록)
마지막 옵션은 REST- 컨트롤러를 직접 추가하는 것입니다.
첫 번째 접근법을위한 완벽한 파일 :
@Entity @Table public class Training implements Serializable { @Id @GeneratedValue private Long trainingId; @ManyToMany @JoinTable(name = "user_training" , joinColumns = {@JoinColumn(name = "profile_id") } , inverseJoinColumns = {@JoinColumn(name = "training_id") }) private List<UserProfile> userProfiles = new ArrayList<>(); @Column(name = "training_subject", length = 200) private String trainingSubject; @Entity @Table public class UserProfile implements Serializable { @Id @GeneratedValue private Long profileId; @Column(name = "profile_description") private String profileDescription; @ManyToMany(mappedBy = "userProfiles") private List<Training> trainings = new ArrayList<>(); public interface TrainingRepository extends JpaRepository<Training, Long> { } public interface UserProfileRepository extends JpaRepository<UserProfile, Long> { }
위의 JSON을 사용하면 테스트 할 수 있습니다. 컬 -POST의 응답에서 올바른 결과를 직접 볼 수 없습니다. 추가 된 관계를 보려면 GET http : // localhost : 8080 / transactions /
/ userProfiles와 같은 userProfiles-link를 따라야합니다.
from https://stackoverflow.com/questions/43111692/unable-to-save-data-to-composite-table-via-spring-data-rest-json-post by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트와 함께 실행 가능한 jar 명령을 사용할 때 Resource FileNotFoundException (0) | 2019.05.26 |
---|---|
[SPRING] 제출 봄에 자식 개체 바인딩 mvc (0) | 2019.05.26 |
[SPRING] Spring + Mongo에서 문서 배열에서 항목 제거 (0) | 2019.05.26 |
[SPRING] Spring -XD 스트림 배포 실패 (0) | 2019.05.26 |
[SPRING] 속도 널 포인트 예외 (0) | 2019.05.26 |