2017-12-01 9 views
1

데이터베이스에 사람을 저장하고 싶습니다. 나는 스프링 5를 사용한다.JPA 계단식 지속성

문제는 데이터베이스에 자동차를 추가 할 때 'car'테이블의 'person_id'필드가 생성 된 ID 대신에 null로 설정된다는 점이다 사람. 그게 이상하다. 왜냐하면 나는 심지어 자동차 클래스에 nullable=false을 설정했기 때문이다. 당신이 관계의 양쪽에 종속성을 설정하기 위해 기억해야 캐스케이드 옵션을 활용하려면

Person p = new Person(); 
List<Car> cars = new ArrayList<>(); 
Car c1 = new Car(); 
Car c2 = new Car(); 

cars.add(c1); 
cars.add(c2); 
p.setCars(cars); 
personJpaRepository.save(p); 
+2

당신이 동기화 매핑 및 DB를 유지하는 사람 –

+0

제안에 차를 추가하지 않은 : 그렇지 않으면 지속성 공급자는 관계로 그것을 고려하지 않을 것이다 person_id로에 null이 아닌 추가 – Zeromus

답변

1

:

@Entity 
public class Person { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer id; 

    @OneToMany(mappedBy = "person",cascade = CascadeType.ALL) 
    List<Car> cars; 

} 

@Entity 
public class Car { 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer carId; 

    @ManyToOne 
    @JoinColumn(name = "person_id",nullable=false) 
    private Person person; 
} 



CREATE TABLE person (
    id INT PRIMARY KEY AUTO_INCREMENT, 
    ... 
); 

CREATE TABLE car (
    id INT PRIMARY KEY AUTO_INCREMENT, 
    person_id INT, 
    ADD CONSTRAINT person_id REFERENCES person(id) 
); 

나는 사람을 저장 JpaRepository를 사용합니다.

cars.add(c1); 
cars.add(c2); 

c1.setPerson(p); 
c2.setPerson(p); 

p.setCars(cars); 
personJpaRepository.save(p);