2017-01-14 4 views
3

매우 간단한 일대 다 관계 - 한 사람 대 여러 애완 동물.봄 데이터 나머지 JPA OneToMany Null JoinColumn

@Entity 
class Human{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @OneToMany(mappedBy="human", cascade={CascadeType.ALL}) 
    private List<Pet> pets; 

    // other fields 
} 

@Entity 
class Pet{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ManyToOne(cascade=CascadeType.ALL) 
    @JoinColumn(name="human_id") 
    private Human human; 

    // others fields 
} 

이 두 테이블 결과 HUMAN (ID) 및PET (ID, human_id)를 만들었다.

EDIT-1

: 나는
<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-rest</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 

EDIT-2 봄 데이터 나머지

을 사용하고 있습니다 : 저는 여기에 데이터를 게시하고 방법에 업데이트 된 모양입니다. 는 그리고 인간에 게시하도록하겠습니다 :

{ 
    // human data 

    "pets": [ 
    "http://localhost/pets/1", 
    "http://localhost/pets/2" 
    ] 
} 

문제 : 가 null있는 애완 동물 테이블의 human_id 열을. 다른 모든 필드는 찾을 수 있지만 관계가 설정되지 않습니다.

무엇이 누락 되었습니까?

+0

가능한 복제 [봄 데이터 REST와 JPA와 양방향 관계를 유지하는 방법?] (http://stackoverflow.com/questions/30464782/how-to-maintain-bi-directional-relationships --with-spring-data-rest-and-jpa) –

답변

0

우선 @ManyToOne 열에서 CascadeType.ALL을 사용하는 것은 위험합니다. 애완 동물이 삭제되면 인간을 삭제할 수 있습니다.

그리고,

준 후

저장 하만 각 개체

Human human = new Human(); 
Pet pet1 = new Pet(); 
pet1.setHuman(human); 
Pet pet2 = new Pet(); 
pet2.setHuman(human); 

List<Pet> pets = new ArrayList<Pet>(); 
pets.add(pet1); 
pets.add(pet2); 

human.setPets(pets); 

그리고 저장 human

+0

Jaehyun, 고맙지 만 스프링 데이터 레스트를 사용하고 있으며 이런 개체를 설정하는 데 대한 제어권이 없습니다. 그것은 잭슨을 거쳐 곧바로 최대 절전 모드로 들어갑니다. – szxnyc

+0

@szxnyc 게시물 본문을 쓸 수 있습니까? –

+0

애완 동물 관계를 게시하는 데 사용하는 URL을 추가했습니다. 나는 당신이 실제 애완 동물 정의가 아닌 URL을 사용하고 있음을보고 싶다고 생각합니다. – szxnyc

1

내가 mappedBy를 제거하고 측면을 따라 @JoinColumn을 넣어 지속의 관계를 얻을 수 있었다 @OneToMany.

이 문제가 있습니까? 성능 문제?

@Entity 
class Human{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @JoinColumn(name="human_id") 
    @OneToMany(cascade={CascadeType.ALL}) 
    private List<Pet> pets; 

    // other fields 
} 

@Entity 
class Pet{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ManyToOne(cascade=CascadeType.ALL) 
    private Human human; 

    // others fields 
}