JPA 级联持久化

JPA Cascade Persistence

我想将 Persons 和他们的 Cars 存储在数据库中。我用 Spring 5.

问题是,当我想在数据库中添加一个有车的人时,'car' table 中的 'person_id' 字段设置为 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); 

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

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

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

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