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);
我想将 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);