【发布时间】:2022-02-02 03:09:48
【问题描述】:
深入了解 Spring JPA,我很难理解这里发生了什么。 这是代码:
实体
@Entity
public class PersonP {
@Id @GeneratedValue
private int id;
public String name;
@ManyToMany
public List<PersonP> knows = new LinkedList<>();
@ManyToMany(mappedBy = "knows", cascade = CascadeType.ALL)
public List<PersonP> knownBy = new LinkedList<>();
public PersonP(){}
public PersonP(String name) {
this.name = name;
}
}
SpringBootApp
@SpringBootApplication
@EntityScan(basePackageClasses = Demo.class)
public class Demo implements CommandLineRunner {
@PersistenceContext
EntityManager em;
public static void main(String[] args) {
new SpringApplicationBuilder(Demo.class).run(args);
}
@Override
@Transactional
public void run(String... args) throws Exception {
sample();
}
@Transactional
public void sample(){
PersonP p1 = new PersonP("P1");
PersonP p2 = new PersonP("P2");
PersonP p3 = new PersonP("P3");
PersonP p4 = new PersonP("P4");
PersonP p5 = new PersonP("P5");
p1.knows.add(p2);
p2.knows.add(p3);
p5.knows.add(p3);
p1.knownBy.add(p3);
p3.knownBy.add(p2);
p2.knownBy.add(p4);
p1 = em.merge(p1);
p1.name = "x1";
p2.name = "x2";
p3.name = "x3";
p4.name = "x4";
p5.name = "x5";
}
我已经到了生成所有人员的地步,但我希望PERSONP_KNOWS 表中有一个额外的条目,例如对于p2.knownBy.add(p4);
但它不是。我假设自从调用merge 之后,关联的实体也会被保存(p1 知道 p2,p2 也被 p4 知道)。不过好像不是这样的……
为什么会这样?
【问题讨论】:
标签: java spring-data-jpa relationship jpa-2.0 cascading