我想将人们的汽车存放在数据库中。我使用的是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);
答案 0 :(得分:1)
如果您想利用Cascade选项,您必须记住在关系的两边设置依赖关系。 否则,持久性提供程序不会将其视为关系:
cars.add(c1);
cars.add(c2);
c1.setPerson(p);
c2.setPerson(p);
p.setCars(cars);
personJpaRepository.save(p);