JPA级联持久性

时间:2017-12-01 10:39:03

标签: spring hibernate rest jpa persistence

我想将人们的汽车存放在数据库中。我使用的是Spring 5.

问题在于,当我想在数据库中添加汽车人时,' person_id'来自汽车的领域' table设置为null,而不是在创建的人员的id上设置。 这很奇怪,因为我甚至在Car class中设置了nullable=false

@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来保存一个人:

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); 

1 个答案:

答案 0 :(得分:1)

如果您想利用Cascade选项,您必须记住在关系的两边设置依赖关系。 否则,持久性提供程序不会将其视为关系:

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

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

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