gpt4 book ai didi

java - JPA级联持久化

转载 作者:行者123 更新时间:2023-11-30 06:23:59 25 4
gpt4 key购买 nike

我想将及其汽车存储在数据库中。我使用 Spring 5。

问题是,当我想在数据库中添加一个拥有汽车的人时,“car”表中的“person_id”字段被设置为 null,而不是设置在创建的人的 ID 上。这很奇怪,因为我什至在 Car 类中设置了 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);

关于java - JPA级联持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47591558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com